关于FPGA设计中的参数化设计

关于FPGA设计中的参数化设计在设计中引入参数化设计可以大大提高模块的可重用性以及节约资源 下面用点灯来记录一下几种常见的设计方式和例化方式 一 在设计中引入 parameter 参数 底层模块设计 实现 500ms 时 led 自动翻转 led 的闪烁周期是 1s 亮 500ms 灭 500ms module param design

大家好,我是讯享网,很高兴认识大家。

在设计中引入参数化设计可以大大提高模块的可重用性以及节约资源,下面用点灯来记录一下几种常见的设计方式和例化方式。

一、在设计中引入parameter参数

底层模块设计

实现500ms时,led自动翻转,led的闪烁周期是1s,亮500ms,灭500ms。


讯享网

module param_design ( input wire clk , input wire rst_n , output reg led ); reg [24:0] cnt; parameter CNT_MAX = 25'd24_999_999; always@(posedge clk or negedge rst_n) if(!rst_n) cnt <= 25'd0; else if(cnt == CNT_MAX) cnt <= 25'd0; else cnt <= cnt + 1'b1; always@(posedge clk or negedge rst_n) if(!rst_n) led <= 1'b1; else if(cnt == CNT_MAX) led <= ~led; else led <= led; endmodule

讯享网

1、defparam方式传入数据

在tb中改变CNT_MAX的数值可以大大减少仿真时等待时间。

讯享网`timescale 1ns/1ns `define clk_period 20 module param_design_tb; //============================<端口>============================== reg clk; reg rst_n; wire led; //================================================================ //== 模块例化 //================================================================ param_design param_design_inst_0 ( .clk (clk), .rst_n (rst_n), .led (led) ); defparam param_design_inst_0.CNT_MAX = 25'd24_99; //================================================================ //== 时钟信号 //================================================================ initial clk = 1'b1; always #(`clk_period/2) clk = ~clk; //================================================================ //== 设计输入信号 //================================================================ initial begin rst_n = 0; #201; rst_n = 1; #; $stop; end endmodule

仿真结果

根据defparam传入的24_99可知2500个时钟周期翻转一次,测试结果验证了设计的正确性。

小讯
上一篇 2025-04-03 19:00
下一篇 2025-02-10 22:11

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/54299.html