用于始终块中的循环生成

时间:2016-01-31 14:38:28

标签: verilog fpga

我试图通过VGA创建32色条纹。

     generate
     genvar i;

     always @(posedge vga_clk) begin
         if (x_num == 10'h3FF) 
             RGB = 16'b00000_000011_00011;
     for (i = 1; i < 32; i = i + 1) begin: rgb_gen
40:      else if ((i * 20 < x_num) && (x_num < (i + 1) * 20)) begin
             RGB = RGB << i;
         end
     end

     end
     endgenerate

但是有一个错误:

Error (10170): Verilog HDL syntax error at top.v(40) near text "else"; expecting "end"

在我看来,结果必须遵循:

always @(posedge vga_clk) begin
    if (x_num == 10'h3FF) 
        RGB = 16'b00000_000011_00011;
    else if ((0 < x_num) && (x_num < 20))
        RGB = RGB << 0;
    else if ((20 < x_num) && (x_num < 40))
        RGB = RGB << 1;
    ..................
end

我做错了什么?

1 个答案:

答案 0 :(得分:1)

您不能在程序代码块的中间嵌入generate块。我想你想要的是

integer i;

    always @(posedge vga_clk) begin
       RGB = 0;  
       if (x_num == 10'h3FF) 
             RGB = 16'b00000_000011_00011;
         else 
         for (i = 1; i < 32; i = i + 1)
            if ((i * 20 < x_num) && (x_num < (i + 1) * 20))
             RGB = RGB << i;
       end