微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > Verilog 参数传递问题

Verilog 参数传递问题

时间:10-02 整理:3721RD 点击:
共三个模块:

  1. 1.top模块:module connect
  2.   (
  3.     CLK,
  4.     RSTn,
  5.     Output_Led,
  6.     Mode_Key
  7.   );
  8.   input CLK;
  9.   input RSTn;
  10.   input[2:0] Mode_Key;

  11.   output[2:0] Output_Led;

  12.   wire CLK_Led;

  13.   led_w_dir U1
  14.   (
  15.     .CLK(CLK),
  16.     .RSTn(RSTn),
  17.     .Mode_Key(Mode_Key),
  18.     .Output_Led(Output_Led),
  19.     .CLK_Led(CLK_Led)
  20.   );

  21.   div_frequency U2
  22.   (
  23.     .CLK(CLK),
  24.     .RSTn(RSTn),
  25.     .Output_CLK(CLK_Led)
  26.   );

  27. endmodule

  28. 2.分频模块
  29. module div_frequency
  30.   (
  31.     CLK,
  32.     RSTn,
  33.     Output_CLK
  34.   );
  35.   ////////
  36.   parameter Width_Div =1;
  37.   parameter Factor_Div =1;

  38.   input CLK;
  39.   input RSTn;

  40.   output Output_CLK;

  41.   reg[Width_Div:0] Count;
  42.   reg Output_CLK;
  43.   ////////
  44.   always@(posedge CLK or negedge RSTn)
  45.     if(!RSTn)
  46.       begin
  47.         Count <= 0;
  48.         Output_CLK <= 0;
  49.       end
  50.     else
  51.       if(Count <= Factor_Div)
  52.         begin
  53.           Count <= Count + 1'b1;  
  54.         end
  55.       else
  56.         begin
  57.           Count <=0;
  58.           Output_CLK <= ~Output_CLK;
  59.         end

  60. endmodule


  61. 3.流水灯模块
  62. `include "div_frequency.v"
  63. module led_w_dir
  64.   (
  65.     CLK,
  66.     RSTn,
  67.     Mode_Key,
  68.     Output_Led,
  69.     CLK_Led
  70.   );
  71.   ////////////
  72.   defparam div_frequency.Width_Div = 23,div_frequency.Factor_Div = 10_000_000;
  73.   ////////////
  74.   input CLK;
  75.   input RSTn;
  76.   input CLK_Led;
  77.   input[2:0] Mode_Key;

  78.   output[2:0] Output_Led;

  79.   reg[2:0] Output_Led;
  80.   reg[2:0] Count;
  81.   ///////////////
  82.   always@(posedge CLK_Led or negedge RSTn)
  83.     if(RSTn == 1'b0)
  84.       begin
  85.         Output_Led <= 3'b111;
  86.         Count <= 3'b000;
  87.       end
  88.     else
  89.       if(Mode_Key == 3'b000)
  90.         begin
  91.           if(Count <= 3'd2)//3'b2 is illegal
  92.             begin
  93.               Count <= Count+1'b1;
  94.               Output_Led <= {Output_Led[1:0],1'b0};
  95.             end
  96.           else
  97.             begin
  98.               Count <= 3'b0;
  99.               Output_Led <= 3'b001;
  100.             end
  101.         end
  102.         else if(Mode_Key == 3'b111)
  103.         begin
  104.           if(Count <= 3'd2)
  105.             begin
  106.               Count <= Count+1'b1;
  107.               Output_Led <= {1'b0,Output_Led[2:1]};
  108.             end
  109.           else
  110.             begin
  111.               Count <= 3'b0;
  112.               Output_Led <= 3'b100;
  113.             end
  114.         end

  115. endmodule

复制代码



主要问题是在defparam这里出了问题无法综合,求高手指教。本人新手一枚。Quartus II 12.0 (32-Bit)综合无法通过。

不推荐这么搞,参数传递,应该在上一级模块完成最合适,怎么跑其它模块里去了,你应该在top模块里修改div_frequency里面的参数,而且别用defparam这么奇葩的定义,一般的parameter就行了,推荐里你定义在模块div_frequency的参数列表里,
比如
module #(
parameter a,
patameter b
) div_frequency (
input clk;
....
output wire dat_o
);
....
endmodule

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top