FPGA学习要点(二)

学号:16010199021

姓名:李若宇

转载自 http://blog.csdn.net/sun19910114/article/details/38683703(有删改)

嵌牛导读:fpga的学习是漫长的道路,我们要时刻记录

嵌牛鼻子:FPGA

嵌牛提问:为什么乘法器会有延时

嵌牛正文:

51.一般情况下,组合逻辑用来完成简单的逻辑功能,如多路选择器,与,或,非逻辑

运算,加法和乘法等算术运算。而时序逻辑则可以用来产生与运算过程有关的

(按时间节拍)多个控制信号序列。

52.组合逻辑,输出只是当前输入逻辑电平的函数(有延时),与电路的原始状态无关

的逻辑电路。即逻辑电路没有记忆部分。

53.时序逻辑,输出不只是当前输入的逻辑电平的函数,还与电路目前所处的状态有关

的逻辑电路。时序逻辑由多个触发器和多个组合逻辑块组成的网络。同步时序逻辑

是设计复杂的数字逻辑系统的核心。时序逻辑借助于状态寄存器记住它目前所处的

状态。

54.同步有限状态机是同步时序逻辑的基础。

55.组合逻辑电路的输出与每个输入信号的电平直接相关。从严格意义上讲,它的输出

在每一个瞬间都有可能发生变化,而同步时序逻辑的输出只有在时钟跳变沿时刻才

可能有变化。

56.数据流的控制:输出结果必须保存在寄存器组中。

在计算电路中设有许多寄存器组,它们是用来暂存运算的中间数据。对寄存器组之间

数据流动进行精确的控制,在算法的实现过程中有着极其重要的作用。这种控制是由

同步状态机实现的。

57. 乘法器是由门组成的,所以会有延时。

58. 我一定能把FPGA学好。。。

59.可综合的复杂同步状态机。

60.同步时序逻辑中的出发输入至少可以维持一个时钟后,才会发生第二次触发。

可以得出同步时序逻辑比异步时序逻辑具有更可靠,更简单的逻辑关系。

用verilog来设计可综合的状态机必须使用同步时序逻辑。

61.注意组合逻辑中竞争冒险的问题。。。

62.在实际设计中应尽量避免使用异步时序逻辑。

63.计算结构的合理配置和运算效率的提高与算法状态机的设计有非常密切的关系。

64.非阻塞赋值方式:《=

它的含义是,如果在begin end 块中同时有许多个非阻塞赋值

,则他们的赋值顺序是同时的,并不是按先后顺序赋值。实际上

它们表示的是同时赋入上一个时钟沿时刻送入寄存器的值。

所有被赋的值在上一时钟沿前就已经保存在寄存器中,它们有足够

的时间传送到被赋值的寄存器的数据端口。

用这种方法可以避免由组合逻辑产生的冒险与竞争。

65.对于随机到达的数据,需要建立同步机制,可以采用使数据通过RAM或者FIFO的

缓存再读取的方法,达到数据同步的目的。

66.通信系统中,数据往往是按照帧组织的。

67.为了避免由异步时钟域产生的错误,经常使用双RAM,双FIFO缓存的方法完成异步

时钟域之间的数据传送。

68.在输入端口使用前级时钟写数据,在输出端口使用本级时钟读数据,并有缓冲区

空或者满的控制信号来管理数据的读和写,以避免数据的丢失,可以非常方便准确

的完成异步时钟域的数据交换。

69.同步状态机-----以同步时钟为基准产生多个使能控制信号的电路。

70.外来的异步信号若要高度可靠地引入芯片电路,必须符合一定的要求,并且必须

经过认真的同步处理,否则容易产生电路设计隐患。

71.把一个时序逻辑抽象成一个同步有限状态机是设计可综合风格的Verilog HDL模块

的关键。

72.D触发器在状态机设计中应用的很多,请注意。

73.在设计高速电路时,常常有必要使状态机的输出与时钟完全同步。

74.用Always 和 case语句来设计有限状态机。

75.目前大多数综合器不能采用Verilog HDL描述的异步状态机转换为电路网表。

76.带有posedge或negedge关键字的事件表达式表示沿触发的时序逻辑,没有posedge

或者negedge关键字的表示组合逻辑或电平敏感的锁存器,或者两者都有。

77.每个表示时序always块只能由一个时钟跳变沿触发,置位或复位最好也由该时钟

跳变沿触发。

78.把某一信号赋为‘bx,综合器就把它解释成无关状态,因而综合器为其生成的硬件

电路最简单。

79.虚拟模块的编写是veriolg语言应用的重要方面。

80.注意下面的语句非常的重要:

always @(negedge nconvst)

fork

# t5 nbusy=0; //注意此语句与下面的@语句是可以互相调换

//位置的,这条语句蕴含的味道很多,很重

//要好好消化。

@(posedge nconvst)

begin

#tconv nbusy=1;

end

join

81.测试模块的源代码,注意可以用不同的方法来写。

82.initial常用于仿真时信号的给出。

83.在always块中,被赋值的信号都必须定义为reg型,这是由时序逻辑电路的特点

所决定的。

84.简单时序分频逻辑电路的设计。和利用条件语句实现计数分频时序电路。

掌握:(1) 掌握条件语句在简单时序模块设计中的应用。

(2) 学习在verilog 模块中应用计数器。

85.通过实验,掌握阻塞赋值和非阻塞赋值的概念和区别。

时序逻辑设计中,通常都使用非阻塞赋值语句,而在实现组合逻辑的assign结构中

,或者always块结构中都必须采用阻塞赋值语句。

86.在较为复杂的组合逻辑电路中,要注意用always块的好处比assign多一些。

87.用高层次的设计方法来设计复杂的时序逻辑,重点是把时序逻辑抽象为有限状态机。

88.掌握存取队列管理的状态机设计的基本方法。(FIFO)

89.常用的时序逻辑电路有计数器,寄存器,锁存器和存储器等。

90.与寄存器采用同步时钟信号控制不同,锁存器是采用电位信号来进行控制的。

91.移位寄存器就是指寄存器里面存储的二进制数据能够在时钟信号的控制下依次

左移还是右移,在数字电路中通常用于串并,并串转换,数值运算等。

92.占空比不是1:1的偶数分频器。

module div6(div6,clk);

output div6;

input clk;

reg div6;

reg[2:0]cnt;

always @(posedge clk)

begin

if(cnt==3'b101)

begin div6<=1;cnt<=0;end

else

begin cnt<=cnt+1;div6<=0;end

93.一定能够把FPGA学好。

94.FPGA 里面如果是同步时序的话 是不需要等的。

95.就是你的Verilog的代码的moduloe的名字和你的verilog的这个文件名本身之间是

没有任何关系的,就是文件名和module名可以一样,也可以不一样。

96.把所有的CLK连接到一起是一件非常有意思和

了不起的事情。 end

endmodule

你可能感兴趣的:(FPGA学习要点(二))