日常记录(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输出。!=与!==类似。

posted @ 2021-12-25 15:49  大浪淘沙、  阅读(621)  评论(0)    收藏  举报