Verilog HDL的不同抽象级别1

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Verilog HDL的不同抽象级别1相关的知识,希望对你有一定的参考价值。

用门级结构描述D触发器,实例如下:

由已经设计好的模块构成更高一级的模块,用触发器组成代清零端的4位寄存器代码和实验结果如下:

module flop(data,clock,clear,q,qb);
input data,clock,clear;
output q,qb;

nand #10 nd1(a,data,clock,clear),
nd2(b,ndata,clock),
nd4(d,c,b,clear),
nd5(e,c,nclock),
nd6(f,d,nclock),
nd8(qb,q,f,clear);
nand #9 nd3(c,a,d),
nd7(q,e,qb);
not #10 iv1(ndata,data),
iv2(nclock,clock);
endmodule

上面的模块可以用行为描述块来实现,如下:

`include "flop.v"
module hardreg(d,clk,clrb,q);
input clk,clrb;
input[3:0] d;
output[3:0] q;

flop f1(d[0],clk,clrb,q[0],),
f2(d[1],clk,clrb,q[1],),
f3(d[2],clk,clrb,q[2],),
f4(d[3],clk,clrb,q[3],);
endmodule

门级描述表示电路的结构,是布线的依据,门级电路结构相当复杂,然而行为级描述比较直观,所以Verilog语言设计复杂逻辑电路的基本思路如下:

1.第一步设计工作:用直观的行为级描述语言描述电路,通过Verilog语言仿真测试验证正确性。

2.前端的逻辑设计:用一种工具(综合器synthesis tool)把行为描述转换为门级结构,仿真正确。

3.后端的制造准备工作

测试文件(test—bench或者text.-fix ture)的编写,代码如下:

`include "flop.v"
`include "hardreg.v"
module hardreg_top;
reg clock,clearb; 
reg[3:0] data;
wire[3:0] qout;

`define stim #100 data=4‘b
event end_first_pass;                      //定义事件
hardreg reg_4bit(.d(data),.clk(clock),.clrb(clearb),.q(qout));

initial
begin
clock=0;
clearb=1;
end

always #50 clock=~clock;       //产生时钟的方法
always @(end_first_pass)
clearb=~clearb;          //事件触发的结果
always @(posedge clock)
$display("at time %0d clearb=%b data=%d qout=%d",$time,clearb,data,qout);

initial
begin
repeat(4)
begin
data=4‘b0000;
`stim 0001;
`stim 0010;
`stim 0011;
`stim 0100;
`stim 0101;
`stim 0110;
`stim 0111;
`stim 1000;
`stim 1001;
`stim 1010;
`stim 1011;
`stim 1100;
`stim 1011;
`stim 1100;
`stim 1101;

`stim 1110;

`stim 1111;
#200 ->end_first_pass;    //此处触发该事件
end
$finish;
end
endmodule

 阻塞赋值与非阻塞赋值初级:

[email protected](posedge clk) 

begin

b<=a;//b=a;

d<=b;//d=b;

end

 

非阻塞赋值得到的是两个触发器的情况,然而阻塞赋值得到的却是一个触发器,具体见书44页。

 

以上是关于Verilog HDL的不同抽象级别1的主要内容,如果未能解决你的问题,请参考以下文章

xilinx /FPGA/ verilog HDL不同位数的数相加,如何进行?

3.初识Verilog HDL

HDL4SE:软件工程师学习Verilog语言

HDL4SE:软件工程师学习Verilog语言

verilog HDL 实现十六路彩灯的控制 谢谢大神

在verilog HDL语言中的阻塞赋值和非阻塞赋值究竟有啥不同?同一变量在不同的过程块中(同时触发)又是如