verilog关键点
wire 可用assign赋值,相当于一条连线,用于连接电路,不能存储数据,无驱动能力,是组合逻辑。
reg 可用always赋值,可综合成register,latch,甚至wire(当其只是中间变量的时候),可以用于组合逻辑或者时序逻辑。
能存储有驱动能力。
一、组合逻辑与时序逻辑的对比
1、组合逻辑的输出与输入直接相关,时序逻辑的输出是由时钟的边沿触发的;
2、组合逻辑容易出现竞争、冒险问题,时序逻辑一般不会出现竞争、冒险现象;
3、组合逻辑的时序难以保证,时序逻辑更容易达到时序收敛、时序逻辑时序更
时序逻辑比组合逻辑多了一个触发器,触发器的输出变化发生的时钟clk的上升或下降沿。

图1-1 组合逻辑图

图1-2 时序逻辑图
1)组合逻辑:组合逻辑的输出仅仅只与当前的输入有关;组合逻辑的描述方法一般有两种描述方法,一种是assign直接复制语句进行描述;另一种则是用always块进行描述;
2)时序逻辑:时序逻辑的输出不仅仅只于当前的输入有关,而且还跟上移状态有关;在verilog中时序逻辑的描述方法都用always块进行描述;
3)always块都可以描述组合逻辑和时序逻辑,他们之间有什么相同点和不同点吗?
不同点(1):在功能描述中always@(敏感列表),看敏感列表中是什么类型是触发,如果是时钟边沿触发always@(posedge clk or negedge res_n),则一定是时序逻辑,如果是电平触发always@( * )或always@(a or b or …),则是时序逻辑,这个( * )表示敏感列表中应该包含的所有电平触发信号,一般这样表示,防止漏写信号!
不同点(2):always块描述组合逻辑时候,赋值语句一般应该使用“=”(阻塞赋值语句)进行赋值;always块描述时序逻辑时候,赋值语句一般应该使用“<=” or “>=”(非阻塞赋值语句)进行赋值;
相同点:在always块中所有的赋值信号都应该被声明为reg类型,不能是wire类型!
Verilog设计的三个层级:行为级主要关注算法验证,不关注电路实现;RTL级则更接近实际电路,描述数据流和执行顺序,适合综合;门级是最底层,直接使用逻辑门描述,虽然不常用,但可通过EDA工具从RTL级自动转换。
行为级:行为级是RTL级的上一层。最符合人类思维的描述方式。主要用于快速验证算法的正确性,不关注电路的具体结构,不一定可以综合成实际电路结构。注重算法。以直接赋值的形式进行,只关注结果。常采用大量运算,延迟等无法综合的语句。其目的不在于综合,而在于算法。
RTL级:使用寄存器这一级别的描述方式来描述电路的数据流方式。RTL在很大程度上是对流水线原理图的描述。接近实际电路结构的描述,可以精确描述电路的原理、执行顺序等。其目的在于可综合。
门级:使用逻辑门这一级别来描述。RTL 中的寄存器和组合逻辑,其物理实现还是对应到具体门电路。但目前寄存器,组合逻辑等的电路结构基本稳定。一般EDA工具可以把RTL描述自动编译为门级描述。所以一般不直接使用门级编程。