FPGA万花筒之(十三):Verilog 连续赋值、过程赋值、过程性连续赋值

姓名:张俸玺 学号:20012100022 学院:竹园三号书院

转自https://blog.csdn.net/qq_38798425/article/details/107084800909

【嵌牛导读】FPGA,可编程门阵列,作为一种较为新型的技术,为大多数人所陌生。如今,用FPGA实现神经网络成为一种热门技术话题。本文对Verilog 连续赋值、过程赋值、过程性连续赋值进行了简要叙述。

【嵌牛鼻子】FPGA   Verilog

【嵌牛提问】Verilog 连续赋值、过程赋值、过程性连续赋值分别指的什么?

【嵌牛正文】

连续赋值:

1)语法上,有关键词“assign”来标识;

2)左侧被赋值的数据类型必须是线网型数据(wire);

3)连续赋值语句不能出现在过程快中(initial/always);

4)连续赋值语句主要用来对组合逻辑进行建模以及线网数据间进行描述;

5)连续赋值语句产生作用后,赋值表达式中信号的任何变化都将立即被反映到赋值线网型数据的取值上;

过程赋值:

1)语法上,没有关键词“assign”;

2)左侧被赋值的数据类型必须是寄存器类型的变量(reg);

3)过程性连续赋值语句只能出现在过程块中;

4)过程性连续赋值语句主要用来对时序逻辑电路进行行为描述;

5)在过程赋值语句的情况下,只有在过程赋值语句被执行时才执行赋值操作,语句执行完后被赋值变量的取值不再受到赋值表达式的影响;

过程性连续赋值语句:

     在verilog HDL中,有两组过程性连续赋值语句可以实现连续赋值:assign-deassign,只能用于对寄存器型变量的连续赋值操作,而不能用来对线网型数据进行连续赋值操作;force-release,它不仅能对寄存器型变量产生作用,也对线网型数据产生作用。force语句的优先级高于assign 。

deassign 撤销对某一个寄存器型变量的连续赋值后,该寄存器变量仍然保持deassign操作之前的取值。

 过程性连续赋值语句比普通的过程赋值语句有更高的优先级。

举例:异步清零的D触发器;

module dff_asyn_clear(clk,clr,d,q);

input clk,clr;

input d;

output q;

reg q;

always@(clr)                                        //用于实现异步清零的always块,强制清零,过程性连续赋值语句的优先级高于过程赋值语句

begin

if(!clr)

assign q =0 ;

else

deassign q;

end

always@(posedge clk)                      //用于实现D触发器正常工作的always块

begin

q = d;

end

endmodule

你可能感兴趣的:(FPGA万花筒之(十三):Verilog 连续赋值、过程赋值、过程性连续赋值)