看一下我在System Verilog中维护的一些代码,我看到一些定义如下的信号:
node [range_hi:range_lo]x;
Run Code Online (Sandbox Code Playgroud)
和其他定义如下:
node y[range_hi:range_lo];
Run Code Online (Sandbox Code Playgroud)
据我所知,它x被定义为packed,而y被定义为unpacked.但是,我不知道这意味着什么.
System Verilog中的打包和解包矢量有什么区别?
编辑:回应@Empi的答案,为什么要在SV中编写的硬件设计师关心数组的内部表示?有没有时候我不应该或不能使用打包信号?
使用VHDL或Verilog进行硬件设计更像是现在的编程.但是,我看到SO成员并没有那么积极地谈论VHDL/Verilog编程.
有没有关于使用Verilog/VHDL/SystemVerilog或SystemC处理硬件设计的论坛?
在绘制硬件图时,我对如何解释阻塞和非阻塞分配感到有些困惑.我们是否必须推断非阻塞分配给我们一个寄存器?然后根据这个陈述c <= a+b ,c将是一个注册权,但不是a和b?
module add (input logic clock,
output logic[7:0] f);
logic[7:0] a, b, c;
always_ff @(posedge clock)
begin
a = b + c;
b = c + a;
c <= a + b;
end
assign f = c;
endmodule
Run Code Online (Sandbox Code Playgroud) 我在SystemVerilog中看到一个代码如下:
if(address[2*pointer+:2])
do_something;
Run Code Online (Sandbox Code Playgroud)
我应该如何理解+:索引此向量的时间?
我发现它被称为位切片,但我无法找到它的解释.
我正在实现一个可配置的DPRAM,其中RAM DEPTH是参数.
如何从RAM DEPTH确定ADDRESS WIDTH?
我知道关系RAM DEPTH = 2 ^(ADDRESS WIDTH)
即ADDRESS WIDTH = log(base 2)RAM DEPTH.
如何在Verilog中实现log(base 2)函数?
systemverilog中有不同的数据类型,可以像下面这样使用:
reg [31:0] data;
logic [31:0] data;
bit [31:0] data;
Run Code Online (Sandbox Code Playgroud)
他们三个如何不同?
我完全这4个学期中的困惑:always_ff,always_comb,always_latch和always.这些如何使用以及用于何种目的?
我最近在verilog/systemverilog代码中看到了这个运算符.
logic [15:0] down_vect;
logic [0:15] up_vect;
down_vect[lsb_base_expr +: width_expr]
up_vect [msb_base_expr +: width_expr]
down_vect[msb_base_expr -: width_expr]
up_vect [lsb_base_expr -: width_expr]
Run Code Online (Sandbox Code Playgroud)
我很少见到这一点,我想问一下这是什么,何时以及如何使用它?
verilog中$size和$bits运算符有什么区别?如果我有变量[9:0]a,[6:0]b,[31:0]c.
c <= [($size(a)+$size(b)-1]-:$bits(b)];
Run Code Online (Sandbox Code Playgroud)
上面表达式中'c'的输出是什么?
我有一个预处理器宏,代表我的设计的分层路径.
例:
`define HPATH top.chip.block
Run Code Online (Sandbox Code Playgroud)
我需要构造一个保存值的字符串`HPATH,所以在我的例子中字符串应该相等top.chip.block.
有没有办法构建这样的字符串?
以下尝试都没有奏效:
string hpath;
hpath = "`HPATH"; // Results in hpath = "`HPATH"
hpath = \"``HPATH\"; // Doesn't compile
hpath = `HPATH; // Doesn't compile
Run Code Online (Sandbox Code Playgroud)
我希望hpath等同于执行此分配hpath = "top.chip.block",但通过使用`HPATH而不是再次指定路径.
我无法使用,%m因为我需要在我的顶级UVM环境中的字符串,而不是在模块中.
更多背景:我想这样做的原因是因为我在UVM类库中使用后门寄存器访问.后门API需要将hdl_path设置为设计中的块,作为字符串.我已经定义了分层路径,并且在指定hdl_paths时尝试重用它们,所以我没有定义两次相同的路径.我的测试平台将使用分层路径和字符串路径.