学习《Verilog HDL数字设计与综合》笔记 第九章实用建模技术

本文详细介绍了Verilog HDL中的过程连续赋值,包括assign、deassign、force和release的使用,以及如何改写参数。还讨论了条件编译、时间尺度设置、系统任务的应用,如随机数生成、文件输出和值变转储,提供了实例解释和应用建议。
摘要由CSDN通过智能技术生成

1)过程赋值将值付给寄存器并保存,过程连续赋值可以有限时间内将表达式的值连续地加到寄存器或线网。

关键字assign和deassign表示第一类过程连续赋值语句。其左边智能是寄存器或一个拼接的寄存器组,不能是线网。可以改写常用的过程赋值的结果,只用于受控制的一段时间。

例如

//具有异步复位端,由下降沿出发的D触发器

module edge_dff(q,qbar,d,clk,reset)

output q,bar;

inout d,clk,reset;

reg q,qbar;


always @(negedge clk) //基于事件的时序控制,clk负向跳变执行always

begin

q=d;

qbar = -d;

end


always @(reset) //当reset为高电平时,执行always,过程连续赋值

if(reset)

begin

assign q=1'b0;

assign qbar = 1'b1;

end

else

begin

deassign q;

deassign qbar;

end

endmodule

这个方法不实用


force和release表示过程连续赋值语句的第二种形式,改写寄存器上的赋值也可以改写线网的赋值。主要是交互调试中使用应当只出现在激励中或调试语句中。

module stimulus;

...

//调用(实例引用)该触发器

edge_dff dff(Q,Qbar,D,CLK,RESET);

...

initial

begin

#50 force dff.q = 1'b1; //在时间单位50时刻,q强制赋值为1

#50 release dff.q; //时间单位100时刻,释放q的赋值

end

...

endmodule


force改写任何连续赋值语句所赋的值,直到释放线网。线网被释放是将立即返回自己的正常驱动值。

module top;

...

assign out = a & b & c; //用连续赋值语句对线网变量out赋值

...

initial

#50 force out =a | b & c;

#50 release out;

end

...

endmodule


2)改写覆盖参数

通过defparam语句或模块调用参数赋值或通过调用参数赋值

defparam在人员模块调用中改变数值,模块调用的层次名称可以用在改写参数值的语句中。

//定义模块

module hello_world;

parameter id_num = 0;

initial

$display("Displaying hello_world id number = %d",id_num);

endmodule


module top

//defparam语句,改变引用的实例模块中的参数值

defparam w1.id._num &

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值