verilog中forever的运用

verilog中forever的运用,第1张

Verilog硬件描述语言有很完整的语法结构和系统,类似高级语言,这些语法结构的应用给我们的设计描述带来很多方便。但是,我们知道,Verilog是描述硬件电路的,它是建立在硬件电路的基础上的。有些语法结构是不能与实际硬件电路对应起来的,也就是说我们在把一个语言描述的程序映射成实际硬件电路中的结构时是不能实现的。下面总结出来的大部分综合工具支持或不支持的verilog语法结构。
一.用verilog建立可综合模型的原则
要保证Verilog HDL赋值语句的可综合性,在建模时应注意以下要点:
(1)不使用initial。
(2)不使用#10。
(3)不使用循环次数不确定的循环语句,如forever、while等。
(4)不使用用户自定义原语(UDP元件)。
(5)尽量使用同步方式设计电路。
(6)除非是关键路径的设计,一般不采用调用门级元件来描述设计的方法,建议采用行为语句来完成设计。
(7)用always过程块描述组合逻辑,应在敏感信号列表中列出所有的输入信号。
(8)所有的内部寄存器都应该能够被复位,在使用FPGA实现设计时,应尽量使用器件的全局复位端作为系统总的复位。
(9)对时序逻辑描述和建模,应尽量使用非阻塞赋值方式。对组合逻辑描述和建模,既可以用阻塞赋值,也可以用非阻塞赋值。但在同一个过程块中,最好不要同时用阻塞赋值和非阻塞赋值。
(10)不能在一个以上的always过程块中对同一个变量赋值。而对同一个赋值对象不能既使用阻塞式赋值,又使用非阻塞式赋值。
(11)如果不打算把变量推导成锁存器,那么必须在if语句或case语句的所有条件分支中都对变量明确地赋值。
(12)避免混合使用上升沿和下降沿触发的触发器。
(13)同一个变量的赋值不能受多个时钟控制,也不能受两种不同的时钟条件(或者不同的时钟沿)控制。
(14)避免在case语句的分支项中使用x值或z值。

最直接的问题就是你所有的二级case语句都写错位数了,比如
always @(pres_state or data_in)
begin: fsm
case (pres_state)
st0: case(data_in)
2'b000: next_state=st0;
2'b100: next_state=st1;
endcase
,这里面其实应该是
always @(pres_state or data_in)
begin: fsm
case (pres_state)
st0: case(data_in)
3'b000: next_state=st0;
3'b100: next_state=st1;
endcase
所有的二级case中都应该改成3'b
另外,里面几个case的语句的判断部分都写错位数了,有的是两位数有的是四位数,比如说你的2'b1101: next_state=st3;

在Verilog HDL中存在着四种类型的循环语句,用来控制执行语句的执行次数。其语法和用途与C语言很类似

forever语句的格式如下:

forever循环语句常用于产生周期性的波形,用来作为仿真测试信号。它与always语句不同处在于不能独立写在程序中,而必须写在initial块中。forever循环的应用示例如下:

repeat语句的格式如下:

在repeat语句中,其表达式通常为常量表达式。如果循环计数表达式的值不确定,即为x或z时,那么循环次数按0处理。

下面的例子中使用repeat循环语句及加法和移位 *** 作来实现一个乘法器。

while语句的格式如下:

while循环执行过程赋值语句直到制定的条件为假。如果条件表达式在开始不为真(包括假、x以及z),那么过程语句将永远不会被执行。

下面举一个while语句的例子,该例子用while循环语句对rega这个8位二进制数中值为1的位进行计数。

更完整点的写法:

for语句的一般形式为:

它的执行过程如下:

for语句最简单的应用形式是很易理解的,其形式如下:

for循环语句实际上相当于采用while循环语句建立以下的循环结构:

这样对于需要8条语句才能完成的一个循环控制,for循环语句只需两条即可。

下面分别举两个使用for循环语句的例子。例1用for语句来初始化memory。例2则用for循环语句来实现前面用repeat语句实现的乘法器。

[例1]:

[例2]:

在for语句中,循环变量增值表达式可以不必是一般的常规加法或减法表达式。下面是对rega这个8位二进制数中值为1的位进行计数的另一种方法。见下例:

其他

参考资料:

关于Verilog 中的for语句的探讨

Verilog-2001更新了generate循环,使用方法参考:


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/13192656.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2025-08-30
下一篇2025-08-30

发表评论

登录后才能评论

评论列表(0条)

    保存