【发布时间】:2014-09-09 20:44:12
【问题描述】:
我有一个 Verilog 模块,它必须一次移动一位。
请帮我完成模块。
module shift_right1 (
output logic [15:0] shifted,
input wire [15:0] unshifted,
input wire [3:0] amt );
localparam int width = 16;
always @* begin
automatic int limit = width - amt;
for ( int i=0; i<limit; i++ ) begin
shifted[i] = unshifted[i+amt];
end
end
endmodule
【问题讨论】:
-
localparam int,automatic int我不知道有什么指南可以写出这样的verilog。您想通过自动标记变量来做什么?一次移动 1 位通常意味着每个时钟周期 1 位,并且您的示例中没有时钟。你能试着澄清这个问题吗?很好地包含了一些代码,虽然很高兴看到。 -
实际上这是我的家庭作业项目的一部分,教授要求我更改代码以一次输入一位。
-
模块 shift_right1 应该对 16 位数量执行逻辑右移。您的解决方案应该像现有代码一样一次分配一位。 (换句话说,不要只使用右移运算符。)测试台输出可能会提供问题所在的线索。提示:问题可以用一两行代码解决
-
@user3159419:看起来您只想完成当前代码,只是缺少对位 [width-1:limit] 的分配。对于逻辑转变,只需在下面的答案中将我的代码更改为
shifted[i] = 1'b0;。