【发布时间】:2016-02-03 22:46:49
【问题描述】:
一种特定类型的位级操作包括在给定索引和新值的情况下设置或清除多位值中的单个位。这个操作可以通过BitSet电路在硬件上实现,接口如下:
- 输入 x 是一个代表原始值的 4 位值。
- 输出 y 是一个 4 位值,表示修改后的值,位设置后 操作。
- 输入索引是一个2位值,范围从0到3,表示要修改的位的索引。
- 输入值是设置为 0 或 1 的 1 位值,表示位索引在输出 y 中应取的值。 y 中的每个其他位都应与 x 中的相应位匹配。
这是我从课堂示例中获取的代码:
module BitSet(input [3:0]x,
input [1:0]index,
input value,
output [3:0]y);
always@(x,index,value);
begin
if (index = 2'b00)
y[0] = value;
if(index = 2'b01)
y[1]=value;
if(index = 2'b10)
y[2]=value;
if(index=2'b11)
y[3]=value;
end
endmodule
这是测试平台:
module BitSet_tb();
reg [3:0]x;
reg [1:0]index;
reg value;
wire [3:0]y;
BitSet uut(
.x(x),
.index(index),
.value(value),
.y(y)
);
initial begin
$monitor ("%d %b %b %b %b", $time, x, index, value, y);
x=4'b0000;
index=2'b00;
value=1'b0;
#10 x=4'b0001;
index=2'b01;
value=1'b0;
#10 x=4'b1111;
index=2'b10;
value=1'b0;
#10 x=4'b1111;
index=2'b11;
value=1'b0;
#10 $finish;
end
endmodule
编译时出现以下错误:
bitset.v:10: syntax error
bitset.v:12: error: invalid module item.
bitset.v:13: syntax error
bitset.v:14: error: invalid module item.
bitset.v:15: syntax error
bitset.v:16: error: invalid module item.
bitset.v:17: syntax error
bitset.v:18: error: invalid module item.
bitset.v:19: syntax error
我什至不确定这是否能满足我的要求,但谁能帮助解决错误或如何修复程序以执行要求的操作?
【问题讨论】:
-
always@(x,index,value);always @*,除非你需要遵循1995年的语法。
标签: verilog system-verilog circuit-diagram iverilog