verilog语法程序框架
关键字
常用关键字
verilog程序框架
c语言的函数——verilog的模块(block)
阻塞赋值、非阻塞赋值
阻塞赋值:在前一条语句赋值完成之前会阻塞后一条语句赋值
非阻塞语句:赋值会同时进行。
状态机
状态机设计
状态空间定义
状态跳转(时序逻辑)
下个状态判断(组合逻辑)
各个状态下的动作(组合逻辑或时序逻辑)
进程
在进行数字系统设计时,设计进程应注意一下几点:
-
将硬件电路的行为以合理的方式映射为一些进程,对每个进程,以最有效的方式进行设计,以最合理的方式描述并实现
-
将组合逻辑实现的电路和用时序逻辑实现的电路应尽量分配到不同的进程中。
-
多个进程之间通过信号线进行通信。在设计中,为了使多个进程协调运行,我们可以设置一些握手信号,在进程中检测这些握手信号的状态,以决定是否进行必要的额操作。在有的设计中,这种握手信号的协调使必不可少的。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oMYcFBg3-1613318036824)(https://gitee.com/root__locus/pic_cloud/raw/master/image-20210201171730051.png)]
任务(TASK)
任务和函数的关键字分别是task和function,利用任务和函数可以把一个大的程序模块分解成许多小的任务和函数,以方便调试,并且能使写出的程序结构更清晰。
例子
task test;//任务定义
input in1,in2;
output out1,out2;
#1 out1 = in1 &in2;
#1 out2 = in1 |in2;
endtask
test (data1,data2,code1,code2);//调用任务
函数
在日常查阅文献时,发现verilig好像也有函数的功能,(我一开始以为只有模块的调用以及连接)。有了函数,那就好说了。着整的是C语言者的福音啊。
与C语言相类似,Verilog HDL使用函数,以适应对不同操作数采取同意运算操作。函数在综合时被转换成具有独立运算功能的电路,没调用一次函数,相当于改变这部分电路的输入,以的到响应的计算结果。函数使用与任务相比有更多的限制和约束。例如,函数不能启动仍无,在函数中不能包含任何的时间控制语句,同时定义函数至少要有一个输入参量灯,这些都需要在使用时注意。【1】
function [7:0] get0;
input [7:0] x;
reg [7:0] count;
integer i;
begin
count = 0;
for(i=0;i<=7;i=i+1)
if(x[i]=1'b0) count = count +1;
get0 = count;
end
endfunction
output [7:0]dout;
input [7:0]data;
assign dout = get0[data]; //函数调用
参考资料
end
endfunction
output [7:0]dout;
input [7:0]data;
assign dout = get0[data]; //函数调用
## 参考资料
[1]《Verilog HDL 程序设计教程》 编著:王金明