【发布时间】:2018-06-14 02:54:26
【问题描述】:
我收到一个我不理解的语法错误。似乎 Verilog 对索引在某种意义上是一个变量很挑剔,但我不确定这里到底发生了什么,或者如何在没有硬编码的情况下绕过它。
这是我的主要模块:
module mojo_top(
// 50MHz clock input
input clk,
// Input from reset button (active low)
input rst_n,
// cclk input from AVR, high when AVR is ready
input cclk,
// Outputs to the 8 onboard LEDs
output[7:0]led,
// AVR SPI connections
output spi_miso,
input spi_ss,
input spi_mosi,
input spi_sck,
// AVR ADC channel select
output [3:0] spi_channel,
// Serial connections
input avr_tx, // AVR Tx => FPGA Rx
output avr_rx, // AVR Rx => FPGA Tx
input avr_rx_busy // AVR Rx buffer full
);
// these signals should be high-z when not used
assign spi_miso = 1'bz;
assign avr_rx = 1'bz;
assign spi_channel = 4'bzzzz;
wire rst = ~rst_n; // make reset active high
genvar i;
generate
for (i=0; i<4; i=i+1) begin: clocks
wire clk_slow;
slow_clock #(.FREQ(2**i)) clk1 (
.clk(clk),
.rst(rst),
.clk_out(clk_slow)
);
assign led[i] = clk_slow;
end
endgenerate
always @(*) begin
for (k=0; k<4; k=k+1) begin
assign led[4+k] = clocks[k].clk_slow; // Why can't I do this?
end
end
endmodule
我正在生成 4 个时钟(1Hz、2Hz、4Hz 和 8Hz)。在最后的始终块中,我有这行:led[4+k] = clocks[k].clk_slow; 尝试将这 4 个时钟分别分配给不同的 LED(@ 987654323@)。
错误是在clocks[k] 之后抱怨.。我想知道我是否不允许在右侧有一个变量索引,但是当我只输入led[4+k] = clocks[k] 时,没有语法错误(尽管在我构建它时显然会出现不同的错误)。
为什么我可以拥有led[4+k] = clocks[k] 而不是led[4+k] = clocks[k].clk_slow?我应该用不同的语法来做到这一点吗?像我这里那样用for循环来做这件事是不可能的吗?
编辑: 如果有人想知道,这是我得到的具体错误。同样,它看起来只是在抱怨我在索引了我想要的特定生成块后做了任何事情。
Line 46, Column 24 : extraneous input '.' expecting {';', '[', '<=', '*', '+', '-', '?', '&', '|', '^', '~^', '^~', '/', '%', '==', '!=', '===', '!==', '&&', '||', '**', '<', '>', '>=', '>>', '<<', '>>>', '<<<'}
我还应该提到led[4+k] = clocks[0].clk_slow 没问题。它让我可以led[4+k] = clocks[0].clk_slow,但不能led[4+k] = clocks[k].clk_slow。
【问题讨论】: