相关疑难解决方法(0)

什么是`+:`和` - :`?

我最近在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 system-verilog

15
推荐指数
1
解决办法
5538
查看次数

Verilog:案例结构中许多案例的语法更好

我在Verilog有一个大约95个案例的案例结构.

        case(address)
            5'd0: header_buffer[7:0] <= writedata;
            5'd1: header_buffer[15:8] <= writedata;
            5'd2: header_buffer[23:16] <= writedata;
            5'd3: header_buffer[31:24] <= writedata;
Run Code Online (Sandbox Code Playgroud)

如您所见,有一种非常可预测的模式.有没有更好的方法来编写这个,这样我就不必手动写出所有的情况,以便我可以将它扩展到任意大的大小,如100或200个案例?似乎某种类型的for循环语法非常有用.

syntax verilog case

4
推荐指数
1
解决办法
536
查看次数

Verilog中的参数数组

是否可以在verilog中创建参数数组?例如,类似以下内容:

parameter[TOTAL-1 : 0] PARAM_ARRAY = {1, 0, 0, 2}
Run Code Online (Sandbox Code Playgroud)

如果不可能,那可能是替代解决方案?

提前致谢

verilog hdl

2
推荐指数
1
解决办法
3万
查看次数

Verilog:“......不是常数”

我有这样创建的三根电线:

wire [11:0] magnitude;
wire [3:0] bitsEnd;
wire [3:0] leadingBits;
Run Code Online (Sandbox Code Playgroud)

所有这些都assign使用组合逻辑进行了一些表达式。以下代码工作正常:

assign leadingBits[3] = magnitude[bitsEnd + 3];
assign leadingBits[2] = magnitude[bitsEnd + 2];
assign leadingBits[1] = magnitude[bitsEnd + 1];
assign leadingBits[0] = magnitude[bitsEnd + 0];
Run Code Online (Sandbox Code Playgroud)

但是,以下(看似等效的)代码给出了错误bitsEnd is not a constant

assign leadingBits[3:0] = magnitude[bitsEnd + 3:bitsEnd];
Run Code Online (Sandbox Code Playgroud)

我不能在这个作业中使用速记吗?为什么在第二种情况下会出现这个错误而不是第一种情况?

verilog

2
推荐指数
1
解决办法
3921
查看次数

systemverilog中逻辑语句的非常量索引

我正在尝试创建一个for循环,在循环迭代的情况下为逻辑数组分配不同的值.

所以,例如,假设我试图实例化两个不同的砖,宽度为10,高度为5.我们也说这些值都是10位.对于两块砖,我有代码:

logic[19:0] Brick_Width;
logic[19:0] Brick_Height;
Run Code Online (Sandbox Code Playgroud)

第一块砖的宽度和高度将被分配到最重要的10位,第二块的最低有效位为10位.

这是我目前拥有的代码:

int i = 19;
initial
begin
 for(i=19; i>=0; i=i-10)
 begin
  assign Brick_Width[i:i-9] = 10;
  assign Brick_Height[i:i-9] = 5;
 end
end
Run Code Online (Sandbox Code Playgroud)

但是,我得到一个错误,说"我"不是一个常数.关于如何做到这一点的任何想法?

verilog system-verilog

1
推荐指数
1
解决办法
2858
查看次数

标签 统计

verilog ×5

system-verilog ×2

case ×1

hdl ×1

syntax ×1