FPGA笔记

来源:互联网 发布:日本创业公司数据库 编辑:程序博客网 时间:2024/06/13 06:36

1.模块的名称要和文件名一致

2.case语句中所以的条件是同时顺序执行的

3.1s=1000 ms 1ms=1000 us1us=1000ns

4.波特率与系统时钟

波特率(如9600bps)指的是每秒传送的比特的个数。继而我们可以算出传输一个比特需要多长时间。即1/9600S

而系统时钟(如50HZ即20ns)需要计数多少次可以达到1/9600s,即1/9600*109 /20 次。即计数这么多次反转输出信号就可以得到波特率的时钟,波特率的波形。但我们经常用到的不是波特率的时钟,而是波特率波形中间点的时钟,在中间点我们可以选择接收还是发送数据,这时我们可以再计一个1/9600*109 /20 /2次的系统时钟,然后让输出反转。程序见常用Verilog HDL程序


5.模块化程序的设计

先要画出你设计程序的一个RTL的视图,从图中可以清楚的看出每一个模块的输入输出信号,然后在去分别的设计这些模块,最后在顶层文件中例化,,顶层模块中包含了系统的输入输出引脚。

如图是一个RTL的视图。。

RTL视图的设计 就是实例化设计---这个和Q中的用图形编辑器或者叫块编辑器设计是一样的。。。。

6.在Verilog中有两种结构化的过程语句:initial语句和always语句。它们是行为建模的两种基本语句,其他的所有行为语句只能出现在过程语句里。无论Verilog的程序多么复杂,其只含有initial和always 语句,initial语句在仿真中应用,即应用程序中只可以出现always过程语句。

7.在一个过程语句中非阻塞语句是并发进行的。不要在同一个always中混合使用阻塞和非阻塞赋值语句

8.Verilog中有四种类型的循环语句:while for repeat forever 循环语句只能在always 和initial块中使用

9.reg型的数据的默认初始值是不定值X,reg型只表示被定义的信号将用在always 块内

10.FPGA的所有IO控制块允许每个I/O 引脚单独配置为输入口,不过这种配置是系统自动完成的。当该I/O 口被设置为输入口使用时(如定义key0 为输入引脚:input key0;),该I/O 控制模块将直接使三态缓冲区的控制端接地,使得该I/O 引脚对外呈高阻态,这样该I/O 引脚即可用作专用输入引脚。

11.执行完case分项后的语句后,则跳出该case语句结构,终止case语句的执行。 case 语句所有表达式的值的位宽必须相等,只有这样控制表达式和分支表达式才能进行对应位的比较。

12.数码管的动态扫描显示时刷新率最好大于50HZ,即每显示一轮的时间不超过20ms。每个数码管显示的时间不能太长也不能太短,时间太长会影响刷新率,导致总体显示呈现闪烁的现象;时间太短发光二极管的电流导通时间也就短,会影响总体的显示亮度。一般控制在1ms左右最佳。即数码管的时钟设置为1000Hz

13.s   ms(10-3s) us(10 -6s) ns(10 -9s)   ps(10 -12s)

14. verilog程序一定要写规范。。否则后有意想不到的后果。。像有if 就要有else 等等。。

一定不可以像下面这样

if(rst_out)
  temp[3]<=1'b0;


 temp[0] <= temp[0] ^ temp[3] ^ !(|temp[3:0]);

temp[3:1] <= temp[2:0];   不要理所当然的对

15.FIFO模块的时序图




0 0
原创粉丝点击