日常记录(19)时间单位与时间精度
Questra sim用法
vsim
*。wif
vlog
vlib
wire与reg
assign语句,只有wire可用,直等号,输入输出都行,物理性质多一点,wire综合为线。
always语句,wire不可被赋值,只有reg的output类型可被赋值。reg物理综合为D触发器,或者逻辑门
clockblocking
input #1默认,采样上一个时间点的值
output #0默认,采用#0时刻。
#0时刻是在0时刻的最后时刻,当本时刻事情做完后,做#0部分的事情。
七进制计数器
输出
q3, q2, q1, c
输入
clk
reset
时间单位与时间精度
时间单位用在# 的延迟表示上,有对应关系。
时间精度对时间单位进行了细化,影响了仿真可视化结果等,也对#的延迟表示的小数部分有影响,小于精度的部分进行四舍五入。
\$time显示表示的64位无符号数。
\$realtime显示实数的时间,需要使用直接打印,而不是采用格式化的输出,需要\$display(\$realtime)这种。
都是以时间单位为显示的(原始情况)。%t则以当前的时间精度为单位进行输出,常用%0t。
格式化输出:https://blog.csdn.net/xs1326962515/article/details/78050593
\$stop(n),n为0,1,2,取值越大显示信息越多,可是我这里是一样的。(vcs)
传递常量参数
module test (a, b); output reg a; input b; parameter size=8,delay=10; initial begin $display("size: %d, delay: %d", size, delay); end endmodule
module top (); wire a; reg b; test t1(a, b); test #(1,2) t2(a, b); test #(1) t3(a, b); endmodule
输出:
size: 8, delay: 10 size: 1, delay: 2 size: 1, delay: 10
或者定义一个新的模块,使用defparam top.t1.size=1,top.t2.delay=2;
也可以进行修改赋值。
同或操作
module test (); initial begin $display("ans is %b",4'b1101^~4'b0101); end endmodule
也可以是使用~^,效果相同。
以下是缩减运算符,和&, |的缩减运算符类似, 对数据进行拆分,然后从左往右按位进行运算。
$display("scale ans: ", ^4'b1010); $display("scale ans2: ", ^~4'b1010);
逻辑移位与算数移位
integer x=-10; initial begin $display("logic shift ans :%b", x>>1); $display("mathmatic shift ans :%b", x>>>1); end
算数移位只是在integer x=-n等有效,一个默认的数,或者reg,则向左移位并无差异。如4'b1100>>1与4'b1100>>>1,结果相同。
另外判断方面,==号和===号,后者包括x,z等仍然进行判断,而前者将其作为x输出。!=与!==类似。
Le vent se lève! . . . il faut tenter de vivre!
Le vent se lève! . . . il faut tenter de vivre!