【FPGA VerilogHDL】第一次尝试:LED灯基础实验

0 实验环境

0.1 软件环境

  • ISE 14.7
  • win10
  • vivado 2017.4

0.2 硬件设备

  • ISE适用的FPGA开发板:ALINK AX309
    在这里插入图片描述

1 需求

能够灵活控制4个LED灯

2 Verilog实现

`timescale 1ns / 1ps
//
// Create Date:    14:18:20 08/08/2020 
// Module Name:    led 
// Revision 0.01 - File Created
//
module led(input clk,input rst,output reg led);//define the time counterreg [31:0]      timer;// cycle counter:from 0 to 4 secalways@(posedge clk or negedge rst)beginif (rst == 1'b0)timer <= 32'd0;                     //when the reset signal valid,time counter clearingelse if (timer == 32'd39_999_999)      //4 seconds count(50M*4-1=199999999)timer <= 32'd0;                     //count done,clearing the time counterelsetimer <= timer + 32'd1;             //timer counter = timer counter + 1end// LED controlalways@(posedge clk or negedge rst)begin								if (rst == 1'b0)					led <= 1'b0;                        //when the reset signal activeelse if (timer == 32'd49_999_999)       //time counter count to 1st sec,LED1 lightenled <= 1'b1;else if(timer == 32'd99_999_999)led <= 1'b0;endendmodule

功能说明:

  • 输入:时钟clk和复位键rst信号(clk是50MHz)
  • 输出:发出控制一个led灯的信号
  • 对于led信号,初始为0,间隔1秒,变成1,再间隔1秒,变成0,循环往复

时间说明:

50MHz对应的时钟周期是0.02μs,因此,1s需要 50 * 10^6个时钟周期

初始的timer = 0,因此,实际的1s,对应timer = 32'd_49_999_999,也就是50_000_000个时钟周期。

3 仿真测试(略)

不是本次实验的重点,略。

4 综合测试

直接在ISE软件执行综合即可。
在这里插入图片描述

5 管脚分配

这是本文的重点。 需要理解

  1. Verilog代码(.v文件)如何与ucf文件建立关联
  2. 代码如何与实际的硬件平台管脚建立关联

5.1 建立.ucf文件

我们先在ISE建立一个.ucf文件,然后分配管脚。

关于具体的管脚分配信息,需要参照开发板使用说明书

在这里插入图片描述
在这里插入图片描述

NET "clk" LOC = T8 | TNM_NET = sys_clk_pin;
TIMESPEC TS_sys_clk_pin = PERIOD sys_clk_pin 50000 kHz;##
NET rst                 LOC = L3 | IOSTANDARD = "LVCMOS33"; ## reset pushbutton
##########LED Pin define#####################
NET led                LOC = P5 | IOSTANDARD = "LVCMOS33";       ## LED1

重要的说明

  1. 以上代码直接被开发板说明给出,不需要自己改,除非你有特定需求
  2. 需要注意的是自己编写的Verilog代码的信号名称,必须与上述代码的NET后面的信号保持一致。例如
  • 时钟信号必须是clk
  • 复位信号必须是rst
  • LED灯信号必须是led
  1. NET后面的内容,是与Verilog代码信号建立关联,而LOC后面的内容,则是与硬件设备的引脚建立关联,之后的部分是电压,可以先不管。

重要的公式:NET “端口名称” LOC = 引脚编号 | IOSTANDARD = “电压” ;

这是非常重要的,我们在进行管脚分配的时候,就是按照这样的方式分配的。

在这里插入图片描述

  1. 代码模拟的硬件设备,突出的就是输入输出端口,与Verilog设计有关
  2. 硬件设备,突出的就是引脚,与硬件有关
  3. 红色的双箭头,就是二者的关联,与.ucf文件有关,它的NET端口名必须和Verilog端口名一样,LOC管脚编号以及电压,必须和硬件设备一样

对于以下ucf内容

########LED Pin define#####################
NET led<0>                LOC = P4 | IOSTANDARD = "LVCMOS33";       ## LED1
NET led<1>                LOC = N5 | IOSTANDARD = "LVCMOS33";       ## LED2
NET led<2>                LOC = P5 | IOSTANDARD = "LVCMOS33";       ## LED3
NET led<3>                LOC = M6 | IOSTANDARD = "LVCMOS33";       ## LED4

值得注意的是<0>这部分。

首先,led引脚的位宽是1,嗯,通常引脚是1位,这样灵活性高(还是得参考对应的说明文档)。

LED的说明如下
在这里插入图片描述
在这里插入图片描述
你很容易知道LED灯引脚位宽是1,为0的时候不亮,为1的时候点亮。

########LED Pin define#####################
NET led<0>                LOC = P4 | IOSTANDARD = "LVCMOS33";       ## LED1
NET led<1>                LOC = N5 | IOSTANDARD = "LVCMOS33";       ## LED2
NET led<2>                LOC = P5 | IOSTANDARD = "LVCMOS33";       ## LED3
NET led<3>                LOC = M6 | IOSTANDARD = "LVCMOS33";       ## LED4

但是这与<>无关,引脚的事情,是LOC后面内容的事情,<>是端口的事情,那么,尖括号对应端口究竟是怎么回事?

猜想,然后试一下就好了!

我们之前的led输出信号是1位,现在我们改一下

output reg[1:0] led

然后再把LED control改改

// LED controlalways@(posedge clk or negedge rst)begin										if (rst == 1'b0)						led <= 1'b0;                     else if (timer == 32'd19_999_999)      led <= 2'b01;else if(timer == 32'd39_999_999)led <= 2'b10;end

注意变化,关注led <= 2'b01;

然后我们再改改.ucf文件

########LED Pin define#####################
NET led<0>                LOC = P4 | IOSTANDARD = "LVCMOS33";       ## LED1
NET led<1>                LOC = N5 | IOSTANDARD = "LVCMOS33";       ## LED2

之后上板测试,很容易得到结论。

如果你还没有得到,不妨试一下3位宽,4位宽的led信号。

结论是:led<0>0对应的是output reg[1:0] led信号的led[0],而led<1>对应的是led[1]

分治思想:区分端口名与管脚编号

对于.ucf文件

  1. NET的值是端口名,与Verilog中的端口名称完全一致,如果是多位宽,则按照上面的结论写上<number>
  2. LOC的值是管脚编号,根据你的需求,你需要将合适的管脚(对应的器件)与合适的端口建立连接

对于同样一个led<0>,它可以分配的引脚有多种选择,不过,需要遵循的是

  1. 引脚对应的器件必须是LED灯
  2. 引脚不能发生冲突(例如2个端口接到了同一个引脚,并且端口信号同一时间发出不同信息)

需要注意:

对于没有的端口号,不能分配管脚!

这是显而易见的,不过还是得多提示一下。

实验思维

很多时候,不管是书籍还是说明文档,都不可能详细描述所有细节,但是,你依然可以通过试验程序,猜测得出结论,然后你需要多次验证(通过实验,资料等)

信息 = 位 + 上下文

以往,我们对于二进制数字10000001的反应可能是对应十进制81,但是对于本实验(假设用了4个LED灯),它的含义就是只有LED4亮只有LED1亮

这也充分诠释了二进制信息含义 = 位 + 上下文的含义。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/384697.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用ISE一键生成bit文件

我们知道&#xff0c;这几个&#xff0c;在第一次做好源文件之后&#xff0c;需要一个个进行右键单击-->run&#xff0c;以发现错误。 但是之后的调试&#xff0c;只要一点点变化&#xff0c;哪怕是注释变化&#xff0c;都需要重新run3次&#xff0c;太麻烦了。 不过经过实…

【FPGA Verilog】实验二:key按键基础实验

只说一下经验和教训 1 必须按照设计流程走 不要因为实验简单&#xff0c;就直接进行综合&#xff0c;比如按照 设计编码RTL优化仿真综合管脚分配&#xff0c;实现下载 一定要按照这个步骤来。 2 必须先查看开发板说明文档 开始出了一个令人困惑的问题&#xff0c;后来发现…

【Java】字符串转换为数字:Integer的parseInt方法

Java官方文档[1]的解释 public static int parseInt​(String s) throws NumberFormatException Parses the string argument as a signed decimal integer. The characters in the string must all be decimal digits, except that the first character may be an ASCII minus…

在win10上使用Vmware安装Mac OS

安装macOS 如何在Windows上VMware上安装macOS Catalina 10.15 做一些提示&#xff1a; 如果您在第一次启动mac的时候&#xff0c;在出现【语言选择】之前&#xff0c;出现了连接蓝牙内容。 您可以将教程中【修改为win10 x64】那一步跳过&#xff0c;请注意&#xff0c;如果您…

【Computer Organization】The Core Design Thinking of single cycle CPU

1 Overview This section introduces someting that maybe you need to know before learning. Note:This CPU is based on MIPS instruction set. 1.1 Tools LogisimCS 3410 ComponentsMARS MIPS simulatorWin10 or Mac OS 1.2 Courses 自己动手画CPU《计算机组织与结构实…

【汇编语言】王爽 - 内中断复习

0 前言 基于王爽《汇编语言》和Coursera的《计算机组成》课程。 1 中断分类 CPU在执行指令的过程中&#xff0c;产生了一个异常/中断&#xff0c;因为CPU只能同时执行一条指令&#xff0c;所以需要暂停该指令的执行&#xff0c;转而去处理异常/中断信息。 这个异常可以来…

【算法】蛮力法/穷举法/枚举法 的基本问题分析

炮兵问题的优化&#xff0c;设立逻辑数组 蛮力法设计思想 有策略地穷举 验证 制定穷举策略避免重复 简单来说&#xff0c;就是列举问题所有可能的解&#xff0c;然后去看看是否满足题目要求&#xff0c;是一种逆向解题方式。&#xff08;我也不知道答案是什么&#xff0c;…

【计算机网络实验·北航】实验一:网络实验入门(1)

1.3 远程在线环境使用 PCA、PCB、PCC和PCD&#xff1a;4台PC机S1、S2&#xff1a;2台交换机R1、R2&#xff1a;2台路由器中间的设备&#xff1a;组网连线器 远程组网连线&#xff1a; 使用PCA上的组网连线软件&#xff0c;配置组网连线器&#xff0c;实现组网连线。 PCA和PCB…

【操作系统】虚拟化CPU、Memory,共享文件

几个概念 CPU、虚拟CPU进程内存、虚拟地址空间 物理的CPU被OS虚拟成了多个虚拟的CPU&#xff0c;这些虚拟CPU分别运行各自的程序&#xff0c;这些正在运行的程序被称为进程。物理内存被OS虚拟成了多个虚拟地址空间&#xff0c;每个进程都有独立的、自己的地址空间&#xff0c;…

【Linux】编译C语言文件(-o -lpthread)

在gcc中使用-o编译 对于一个一般的程序&#xff0c;直接使用gcc <C语言文件名> -o <编译后生成的文件名>即可&#xff0c;例如以下程序&#xff1a; // cpu.c #include <stdio.h> #include <unistd.h> #include <stdlib.h>int main(int argc,…

【Linux】Ubuntu下进行C语言编程

前言 需要您会使用Windows下cd切换目录的基本命令&#xff0c;否则请先自学相关知识&#xff0c;之后再阅读本文。 0 基础命令 介绍最基础的Linux终端命令。 su - root&#xff1a;切换到root用户&#xff08;不用也可以&#xff09;ls&#xff1a;查看当前目录位置cd&…

【Linux】Ubuntu 18下安装Vim自动补全插件YouCompleteMe(可高速下载安装)

前言 本文写于2020年10月&#xff0c;如果你多年后看见这篇文章&#xff0c;方法可能已经失效&#xff0c;但是请牢记&#xff0c;尽量下载你所处时代的最新版本的软件&#xff0c;会减少很多麻烦。 摆正心态 即便按照本文操作&#xff0c;由于你的系统状态和我的不一样&…

【操作系统】进程调度(1):FIFO(先进先出)算法 原理与实践

0 前言 本文基于书籍《Operating System&#xff1a;Three Easy Pieces》。 中译本&#xff1a;《操作系统导论》&#xff0c;中译本质量还可以&#xff0c;但是英文版后来的更新&#xff0c;中文版目前没有进行同步更新&#xff08;写下此文的时间是2020年10月&#xff09; 1…

【操作系统】进程调度(2a):SJF(短任务优先) 算法 原理与实践

0 前言 接上一篇文章&#xff1a;进程调度&#xff08;1&#xff09;&#xff1a;FIFO&#xff08;先进先出&#xff09;算法 原理与实践 1 前提铺垫 请参考上一篇文章的前提铺垫部分&#xff0c;本文与之完全一致。 2 SJF 原理 SJF&#xff08;Shortest Job First&#x…

【操作系统】进程调度(2b):STCF(最短完成时间优先) 算法 原理与实践

0 前言 接上一篇文章&#xff1a;进程调度&#xff08;2a&#xff09;&#xff1a;SJF&#xff08;短任务优先&#xff09; 算法 原理与实践 1 前提铺垫 与上一篇同。 2 STCF 原理 STCF&#xff08;Shortest Time-to-Completion First&#xff09;最短完成时间优先。 2.1…

【操作系统】进程调度(3):RR(轮转) 算法 原理与实践

0 前言 接上一篇文章&#xff1a;进程调度&#xff08;2b&#xff09;&#xff1a;STCF&#xff08;最短完成时间优先&#xff09; 算法 原理与实践 1 前提铺垫 除了与上一篇相同的&#xff0c;这里介绍新的基础知识。 1.1 三种类型的程序 计算密集型&#xff08;CPU导向&…

【操作系统】进程调度(4):I/O、不可预测的运行时间

0 前言 上一篇文章&#xff1a;进程调度&#xff08;3&#xff09;&#xff1a;RR&#xff08;轮转&#xff09; 算法 原理与实践 1 前提铺垫 与上一篇同。 2 引入I/O操作 之前我们一直提及的是计算密集型程序&#xff0c;现在我们的程序可以进行I/O交互了&#xff0c;它会…

【计算机系统设计】重点 · 学习笔记(0)

HDL等硬件描述语言&#xff0c;例如Verilog&#xff0c;是并行的&#xff0c;而不像软件一样的顺序执行的&#xff0c;例如很多的always块&#xff0c;initial块&#xff0c;都是并行的&#xff0c;他们会转换为硬件电路&#xff0c;而在仿真的时候&#xff0c;他们也是并发执行…

【计算机系统设计】学习笔记(1)03,04

疑问&#xff1a;sw和lw指令&#xff0c;获取的地址不是4的整倍数&#xff08;字节不对齐&#xff09;的时候&#xff0c;应该如何处理&#xff1f; 东南大学MOCC 计算机系统综合设计 03 03-1 寄存器 介绍了MIPS寄存器&#xff0c;32个寄存器的基本功能和使用&#xff0c;注…

【期末考试】计算机网络、网络及其计算 考试重点

个人简介&#xff1a;Java领域新星创作者&#xff1b;阿里云技术博主、星级博主、专家博主&#xff1b;正在Java学习的路上摸爬滚打&#xff0c;记录学习的过程~ 个人主页&#xff1a;.29.的博客 学习社区&#xff1a;进去逛一逛~ 计算机网络及其计算 期末考点 &#x1f680;数…