芯路恒电子技术论坛

 找回密码
 立即注册
热搜: 合集
查看: 5340|回复: 1

For语法在Quartus中的综合问题2

[复制链接]
  • TA的每日心情
    擦汗
    2020-2-13 22:59
  • 2

    主题

    10

    帖子

    89

    积分

    初级会员

    Rank: 3Rank: 3

    积分
    89
    发表于 2019-2-14 01:54:32 | 显示全部楼层 |阅读模式
    本帖最后由 000 于 2019-2-14 02:09 编辑
    1. module mixed_width_ram_v

    2. #(
    3.                 parameter        Write_Width = 16,                //双字节存储
    4.                 parameter        Depth = 64,
    5.                 parameter        Read_Width = 8                        //单字节读出
    6. )

    7. (
    8.         input write_ena,
    9.         input clk,
    10.         input [log2(Depth) - 1 : 0] write_addr,
    11.         input [Write_Width - 1 : 0] write_data,
    12.         input [log2(Depth) + log2(Ratio) - 1 : 0] read_addr,
    13.         output reg [Read_Width -1 : 0] q
    14. );
    15.         localparam Ratio = Write_Width / Read_Width;

    16.         function integer log2 (input integer bit_depth);
    17.         begin
    18.                 bit_depth = bit_depth - 1;
    19.                 for(log2 = 0; bit_depth > 0; log2 = log2 + 1)
    20.                         bit_depth = bit_depth >> 1;
    21.         end
    22.         endfunction

    23.         reg [Read_Width -1 : 0] ram[Depth - 1 : 0][Ratio - 1 : 0];

    24.         always@(posedge clk)
    25.         begin
    26.                 q <= ram[read_addr / Ratio][read_addr % Ratio];
    27.         end
    28.         
    29. //////////////////////////////////////////////////////////////////////////////////////////
    30. ///////////////////////////////////以下四种代码////////////////////////////////////////////

    31. ////////////////////////////////////////////一: generate综合成逻辑门,资源爆炸
    32. //        genvar j;
    33. //        generate
    34. //                for (j = 0; j < Ratio; j = j + 1)
    35. //                begin:genname
    36. //                        always@(posedge clk)
    37. //                        begin
    38. //                                if(write_ena)
    39. //                                begin
    40. //                                        ram[write_addr][j] <= write_data[Read_Width*(j+1)-1 : Read_Width*j];
    41. //                                end
    42. //                        end
    43. //                end
    44. //        endgenerate


    45. ////////////////////////////////////////////二:generate等效语句,弹窗式错误
    46. //        always@(posedge clk)
    47. //        begin
    48. //                if(write_ena)
    49. //                begin
    50. //                        ram[write_addr][1] <= write_data[Read_Width*(1+1)-1 : Read_Width*1];
    51. //                end
    52. //        end
    53. //        always@(posedge clk)
    54. //        begin
    55. //                if(write_ena)
    56. //                begin
    57. //                        ram[write_addr][0] <= write_data[Read_Width*(0+1)-1 : Read_Width*0];
    58. //                end
    59. //        end


    60. ////////////////////////////////////////////三:效果最好,综合成专用存储单元
    61. //        always@(posedge clk)
    62. //        begin
    63. //                if(write_ena)
    64. //                begin
    65. //                        ram[write_addr][1] <= write_data[Read_Width*(1+1)-1 : Read_Width*1];
    66. //
    67. //                        ram[write_addr][0] <= write_data[Read_Width*(0+1)-1 : Read_Width*0];
    68. //                end
    69. //        end



    70. ////////////////////////////////////////////四: for循环参数化模块出错
    71. //        integer j;
    72. //        always@(posedge clk)
    73. //        begin
    74. //                if(write_ena)
    75. //                begin
    76. //                        for (j = 0; j < Ratio; j = j + 1)
    77. //                        begin
    78. //                                ram[write_addr][j] <= write_data[Read_Width*(j+1)-1 : Read_Width*j];    //129行这里出错
    79. //                        end
    80. //                end
    81. //        end
    82.         
    83.         
    84.         
    85.         
    86. endmodule
    复制代码
    参数化模块时遇到各种疑难杂症
    ////////////////////////////////////////////一: generate综合成逻辑门,资源爆炸
    ; Flow Summary                                                                     ;
    +------------------------------------+---------------------------------------------+
    ; Flow Status                        ; Successful - Thu Feb 14 00:24:31 2019       ;
    ; Quartus II 64-Bit Version          ; 13.0.0 Build 156 04/24/2013 SJ Full Version ;
    ; Revision Name                      ; study                                       ;
    ; Top-level Entity Name              ; mixed_width_ram_v                           ;
    ; Family                             ; Cyclone IV E                                ;
    ; Device                             ; EP4CE10F17C8                                ;
    ; Timing Models                      ; Final                                       ;
    ; Total logic elements               ; 1,274 / 10,320 ( 12 % )                     ;
    ;     Total combinational functions  ; 752 / 10,320 ( 7 % )                        ;
    ;     Dedicated logic registers      ; 1,032 / 10,320 ( 10 % )                     ;
    ; Total registers                    ; 1032                                        ;
    ; Total pins                         ; 39 / 180 ( 22 % )                           ;
    ; Total virtual pins                 ; 0                                           ;
    ; Total memory bits                  ; 0 / 423,936 ( 0 % )                         ;
    ; Embedded Multiplier 9-bit elements ; 0 / 46 ( 0 % )                              ;
    ; Total PLLs                         ; 0 / 2 ( 0 % )                               ;
    +------------------------------------+---------------------------------------------+

    ////////////////////////////////////////////二:generate等效语句,弹窗式错误

    *** Fatal Error: Access Violation at 0X000007FEDF882CA0
    Module: quartus_map.exe
    Lock in use: 53
    Stack Trace:
        0x12c9f: CDB_SGATE_OPERATOR::mls_sweep + 0x41f
         0xad8f: OPT_RAM_AI::OPT_RAM_AI + 0x7aff
         0x9a0b: OPT_RAM_AI::OPT_RAM_AI + 0x677b
         0x8e46: OPT_RAM_AI::OPT_RAM_AI + 0x5bb6
         0xb5d0: RTL_ROOT::post_extraction_processing + 0x6e0
        0x14ec4: RTL_ROOT::post_extraction_processing + 0x9fd4
        0x1490e: RTL_ROOT::post_extraction_processing + 0x9a1e
        0x1312c: RTL_ROOT::post_extraction_processing + 0x823c
        0x5459c: RTL_ROOT::process_sgate_netlist + 0x1dc
       0x13e001: sgn_clear_check_ip_functor + 0xb3e01
       0x1400e8: sgn_clear_check_ip_functor + 0xb5ee8
        0xa41d6: sgn_clear_check_ip_functor + 0x19fd6
        0xa6a44: sgn_clear_check_ip_functor + 0x1c844
        0xa73ca: sgn_clear_check_ip_functor + 0x1d1ca
        0x10e17: sgn_qic_full + 0x257



        0x11fad: qexe_get_command_line + 0x1b7d
        0x14e0e: qexe_process_cmdline_arguments + 0x59e
        0x14f21: qexe_standard_main + 0xa1

         0x4ae8: msg_exe_fini + 0x58
         0x522c: msg_exe_fini + 0x79c
         0x1524: MEM_SEGMENT_INTERNAL::~MEM_SEGMENT_INTERNAL + 0x194
         0x5e0f: msg_exe_main + 0x8f

        0x159cc: BaseThreadInitThunk + 0xc
        0x2a560: RtlUserThreadStart + 0x20

    End-trace

    Quartus II 64-Bit Version 13.0.0 Build 156 04/24/2013 SJ Full Version


    ////////////////////////////////////////////三:效果最好,综合成专用存储单元
    ; Flow Summary                                                                     ;
    +------------------------------------+---------------------------------------------+
    ; Flow Status                        ; Successful - Thu Feb 14 00:30:31 2019       ;
    ; Quartus II 64-Bit Version          ; 13.0.0 Build 156 04/24/2013 SJ Full Version ;
    ; Revision Name                      ; study                                       ;
    ; Top-level Entity Name              ; mixed_width_ram_v                           ;
    ; Family                             ; Cyclone IV E                                ;
    ; Device                             ; EP4CE10F17C8                                ;
    ; Timing Models                      ; Final                                       ;
    ; Total logic elements               ; 0 / 10,320 ( 0 % )                          ;
    ;     Total combinational functions  ; 0 / 10,320 ( 0 % )                          ;
    ;     Dedicated logic registers      ; 0 / 10,320 ( 0 % )                          ;
    ; Total registers                    ; 0                                           ;
    ; Total pins                         ; 39 / 180 ( 22 % )                           ;
    ; Total virtual pins                 ; 0                                           ;
    ; Total memory bits                  ; 1,024 / 423,936 ( < 1 % )                   ;
    ; Embedded Multiplier 9-bit elements ; 0 / 46 ( 0 % )                              ;
    ; Total PLLs                         ; 0 / 2 ( 0 % )                               ;
    +------------------------------------+---------------------------------------------+

    ////////////////////////////////////////////四: for循环参数化模块出错
    Error (10734): Verilog HDL error at mixed_width_ram_v.v(129): j is not a constant




    虚心求教如何才能正确参数化此模块

    回复

    使用道具 举报

  • TA的每日心情
    擦汗
    2020-2-13 22:59
  • 2

    主题

    10

    帖子

    89

    积分

    初级会员

    Rank: 3Rank: 3

    积分
    89
     楼主| 发表于 2019-10-24 00:41:45 | 显示全部楼层
    似乎是for 循环里只能按位[  ]操作,[  :  ]写法里不支持循环变量
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|小黑屋|Archiver|芯路恒电子技术论坛 |鄂ICP备2021003648号

    GMT+8, 2024-4-18 10:24 , Processed in 0.106490 second(s), 31 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc. Template By 【未来科技】【 www.wekei.cn 】

    快速回复 返回顶部 返回列表