【发布时间】:2020-03-03 05:23:19
【问题描述】:
我有一个 32 位输入端口 pins 和一个 32 位输入使能 pin_en,并希望生成一个由使能选择的 16 位输出。我这样写了verilog,但似乎有一些错误。 我该如何解决它或任何其他方式来实现?谢谢!
ps:en 选择的引脚不超过 16 个,但可能更少。
input [31:0] pins;
input [31:0] pin_en;
output [15:0] actual_pins;
generate
genvar i;
localparam cnt = 0;
for(i = 0; (i < 'd32) & (cnt < 'd16); i = i + 'd1) begin : b1
if(pin_en[i]) begin
assign actual_pins[i] = pins[cnt];
cnt = cnt + 'd1;
end
end
if(cnt < 16)
assign actual_pins[16 : cnt] = 'b0;
endgenerate
【问题讨论】:
-
我们不能用像 “有一些错误”这样的描述来做任何事情。顺便说一句,您编写 HDL 就像它是一种普通的编程语言一样。它不是!我建议你看看现有的 Verilog 代码。
-
谢谢@Oldfart,我是verilog的新手,我正在学习。我问了这个问题后用谷歌搜索,我知道 cnt 不能以这种方式使用。我在我的项目中找到了绕过这种情况的方法。但我仍然不知道如何从 32 位动态选择 16 位(或更少)。
-
您的问题不清楚。您希望如何仅使用 enable 将信号数量从 32 个减少到 16 个?通常,您只会写
actual_pins = pins & pin_en,但归约部分令人困惑。正如@Oldfart 所提到的,您编写的代码就像是 Python (?) 代码一样。但这行不通。