我试着写一些像(在verilog中)的代码:
parameter N = 128;
if (encoder_in[0] == 1) begin
23 binary_out = 1;
24 end else if (encoder_in[1] == 1) begin
25 binary_out = 2;
26 end else if (encoder_in[2] == 1) begin
27 binary_out = 3;
28 end else if (encoder_in[3] == 1) begin
29 binary_out = 4;
30 end else if (encoder_in[4] == 1) begin
31 binary_out = 5;
32 end else if (encoder_in[5] == 1) begin
33 binary_out = 6;
34 end else if (encoder_in[6] == 1) begin
35 binary_out = 7;
36 end else if (encoder_in[7] == 1) begin
37 binary_out = 8;
......
......
36 end else if (encoder_in[127] == 1) begin
37 binary_out = 8;
end
我希望我可以将N更改为我想要的任何值,它仍然有效。 “生成”会在这里运作吗?那样:
parameter N = 128;
if (encoder_in[0] == 1) begin
binary_out = 1;
generate for (i=1; i<N; i=i+1) begin
end else if (encoder_in[i] == 1) begin
binary_out = i+1;
end endgenarate
end
如果没有,我该怎么办? 非常感谢!
答案 0 :(得分:5)
生成块不能在另一个语句中使用。我仍在寻找IEEE std 1800-2012中的确切参考。
如果你想要一个LSB具有更高优先级的解码器,那么下面的工作将不使用生成块:
parameter N = 128;
integer i;
...
always @* begin
binary_out = 0; // default value
...
for(i=N-1; i>=0; i=i-1) begin
if (encoder_in[i]==1'b1) begin
binary_out = i+1;
end
end
end
请注意,这是使用倒计时循环。计数将优先考虑MSB。