#()的用法【FPGA】

用法2种:

1预处理参数。

2时间延时。

在Verilog中,#()是一个参数化的模块声明,用于定义模块的参数。这些参数可以在模块实例化时被传递,以便在模块内部使用。#()中的参数可以是数字、字符串或其他参数化模块。具体说明如下:

  1. #()中的参数可以是数字、字符串或其他参数化模块。

  2. 参数可以在模块实例化时被传递,以便在模块内部使用。

  3. #()中的参数可以有默认值 ,如果没有传递参数,则使用默认值。

  4. #()中的参数可以在模块内部使用,例如用于计算延迟时间等。

下面是一个简单的Demo,展示了如何在Verilog中使用#()声明一个参数化模块:

默认参数:

cs 复制代码
module sleep_led #
(
    parameter CNT_1US_MAX = 6'd49,// 有默认值的,实例化时可以传入新值
    parameter CNT_1MS_MAX = 10'd999,// 没有新值传入,就使用默认值
    parameter CNT_1S_MAX = 10'd999
)
(
    input clk,
    input rst,
    input button,
    output reg led
);

reg [9:0] cnt_1us;
reg [9:0] cnt_1ms;
reg [9:0] cnt_1s;

always @(posedge clk or posedge rst)
begin
    if (rst)
    begin
        cnt_1us <= 0;
        cnt_1ms <= 0;
        cnt_1s <= 0;
    end
    else
    begin
        if (cnt_1us == CNT_1US_MAX)
        begin
            cnt_1us <= 0;
            cnt_1ms <= cnt_1ms + 1;
        end
        else
        begin
            cnt_1us <= cnt_1us + 1;
        end

        if (cnt_1ms == CNT_1MS_MAX)
        begin
            cnt_1ms <= 0;
            cnt_1s <= cnt_1s + 1;
        end

        if (cnt_1s == CNT_1S_MAX)
        begin
            cnt_1s <= 0;
            if (button)
            begin
                led <= ~led;
            end
        end
    end
end

endmodule

时间延时:

cs 复制代码
`timescale  1ns/1ns

module  led 
(
    input   wire    key_in  ,   //输入按键

    output  wire    led_out     //输出控制led灯
);

#10  //延时10ns

assign  led_out = ~key_in ;

endmodule
相关推荐
忙什么果6 小时前
上位机、下位机、FPGA、算法放在哪层合适?
算法·fpga开发
博览鸿蒙12 小时前
从迷茫自学到稳定入行:我的 FPGA 上岸全过程
fpga开发
芯门16 小时前
FPGA商用级ISP(二):镜头阴影校正(LSC)的网格增益插值与并行硬件架构实现
图像处理·fpga开发·isp
Felven17 小时前
corundum 40G开源网卡测试结果
fpga开发·性能测试·dds·开源网卡·mqnic
顾知行18 小时前
ABB PC D230 3BHE022291R0101 励磁CCM测量板
fpga开发·abb·abb励磁
芯门19 小时前
FPGA商用级ISP:动态坏点校正(DPCC)的滑窗架构与并行判决实现
图像处理·fpga开发·isp
碎碎思2 天前
双管齐下筑优势 AMD 扩容中端 FPGA 阵营并延至 2045 + 长期供货
fpga开发
绿算技术2 天前
【无标题】
数据库·人工智能·科技·算法·fpga开发·硬件架构
FPGA技术联盟2 天前
DO‑254 物理测试到底在“测什么”?
fpga开发
FPGA小c鸡2 天前
FPGA中的DSP与AI融合:从硬件加速到推理部署完全指南(附实战案例)
人工智能·fpga开发