fpga系列 HDL:verilog 仿真错误 Error: ***.vt(33): ‘i‘ is an invalid type in Generate loop. Must be a genvar

  • 仿真错误代码如下:
// 时钟生成
always #(CLK_PERIOD/2) clk = ~clk;
parameter DATA_WIDTH = 8;   // 数据宽度
parameter FIFO_DEPTH = 14;   // FIFO 深度

// Write data into FIFO
integer   i ;
for (i = 0; i < FIFO_DEPTH; i = i + 1) begin
        #(CLK_PERIOD/2)
            data_data_in = i + 1; // 写入数据 1, 2, 3, ...
end
  • 一些解决方案是将变量 integer 换成 genvar,genvar和generate 块的作用是在编译时生成重复的硬件结构(如寄存器组、连线等),而不是在仿真时动态执行。
  • 编译器需要在编译阶段展开循环,并生成对应的硬件描述,因此循环变量必须是静态的 genvar 类型
  • 但是在这个情况下,在仿真中动态地写入数据到,应该使用 initial 或 always 块,而不是 generate 块
  • 修改代码如下:
// 时钟生成
always #(CLK_PERIOD/2) clk = ~clk;

parameter DATA_WIDTH = 8;   // 数据宽度
parameter FIFO_DEPTH = 14;   // FIFO 深度

// Write data into FIFO
integer   i ;
initial begin
    for (i = 0; i < FIFO_DEPTH; i = i + 1) begin
            //always@(posedge clk);
            #(CLK_PERIOD/2)
                data_data_in = i + 1; // 写入数据 1, 2, 3, ...
    end
end

CG

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值