【发布时间】:2013-10-18 06:36:01
【问题描述】:
这是我的问题。 我有未知数量的输入(全部为 3 位宽),具体取决于系统配置。我想设计一个解码器来选择具有最大值的输入作为输出。所以我在这里使用嵌入式 ruby,以便可以将配置传递给 RTL。 这是我的设计:
代码:
module decoder
(
<% (1...NUM_INPUT).each do |i| -%>
input [2:0] freq_<%=i%>,
<% end -%>
output [2:0] decoded_freq
)
<% (1...NUM_INPUT-1).each do |i| -%>
wire [2:0] x<%=i%>,
<% end -%>
integer i;
//decode logic below
assign x1 = (freq_1 > freq_2)? freq_1:freq_2; //compare the first two inputs and select the bigger one
for (i=1; i<NUM_INPUT-1;i++) //for-loop to do the rest
x<%=i+1%> = (x<%=i%> > freq_<%=i+2%>)? x<%=i%>:freq_<%=i+2%>;
assign decoded_freq = x<%=NUM_INPUT-1%>;
endmodule
这行得通吗?我不确定这里的 for 循环。它会按我的意愿工作吗?还有其他方法吗?
【问题讨论】:
-
哇这是怎么回事?我不认识 Ruby,但这看起来真的很难看。无论如何,如果您想合成具有“未知”数量输入的东西,则需要在合成之前知道输入的数量。您不能在 FPGA 中动态创建信号,当它被编程时,它都需要在那里。
-
很明显你还没有尝试过使用ruby来解析文件。最后一个 for 循环不会解开,并且您有 Verilog 拼写错误。您要遵循哪个版本的 IEEE 标准?您可以在没有嵌入 ruby 的情况下实现该功能。 (提示:使用参数)