【verilog每日一练】参数传递 - FPGA开发者技术社区 - 电子技术论坛 - 广受欢迎的专业电子论坛
分享 收藏 返回

Mill 关注 私信
[问答]

【verilog每日一练】参数传递

基于上一题目模块中定义的parameter参数,在例化该模块时实现参数传递

回帖(5)

Mill

2023-8-30 11:23:52

最佳答案


解析:通过模块例化可实现参数传递,若模块中的参数不需要其他模块修改,则模块例化时不需要添加参数;若需要在该模块以外修改参数,则通过模块例化进行参数传递方法如下。另外,在参数定义中通常使用大写字母表示,与变量名称作区分。

在上一题目中module_name模块定义变量为50_000_000,本题目在例化该模块时参数传递使用数值为20_000_000,在整个设计中CLK_FRE参数的实际值为20_000_000。

jf_84491108

2023-8-30 14:54:25
module top_module  
(  
    input wire clk,  
    // 其他输入输出  
);  
  
parameter CLK_FRE = 50000000; // 50MHz  
  
// 其他逻辑和代码  
  
endmodule

一曲作罢

2023-8-30 15:52:26
  1. `define CLK_FRE 50000000  
  2. `define PERIOD_NS (`CLK_FRE/1000000)` //将频率转换为周期(纳秒)  
  3.   
  4. module clk_gen (  
  5.     input wire clk_in, //输入时钟  
  6.     output reg clk_out //输出时钟  
  7. );  
  8.     always @(posedge clk_in) begin //在输入时钟的上升沿触发  
  9.         #(`PERIOD_NS) clk_out <= ~clk_out; //反转输出时钟,以产生正确的时钟信号  
  10.     end  
  11. endmodule
在上述代码中,CLK_FRE定义了一个频率,单位为Hz,然后通过除以1000000将其转换为MHz。然后我们通过define定义了一个名为PERIOD_NS的参数,它代表了1Hz的周期时间,单位为纳秒。

然后,在clk_gen模块中,我们使用了一个always块来反转输出时钟信号,以产生正确的时钟信号。这个反转操作在每个周期的上升沿执行,持续PERIOD_NS个时间单位。

jf_99074111

2023-8-30 20:22:46
module sub_module  
(  
    input clk,  
    // 其他输入输出  
);  
  
parameter CLK_FRE = 50000000; // 50MHz  
  
// 其他逻辑和代码  
  
endmodule

module top_module  
(  
    input clk,  
    // 其他输入输出  
);  
  
sub_module #(.CLK_FRE(50000000))
sub_module1(
    .clk(clk)
    //其他输入输出
);
  
// 其他逻辑和代码  
  
endmodule

更多回帖

×
发帖