Verilog语法之generate与genvar用法

摘要:本文主要讲解了generate与genvar的用法,并且给出了详细的一些例子和用法,可以通过阅读本文基本了解其用法和规则。

        generate语法可以实现某些语句的重复。genvar与generate是Verilog 2001才有的,功能非常强大,可以配合条件语句,分支语句等做一些有规律地例化或者赋值等操作;对于提高简洁代码很有帮助,同时也减少了人为的影响。

        generate语法有generate for、generate if和generate case这3种。可以在generate中时钟的语法语句包括module(模块)、UDP(用户自定义原语)、门级原语、连续赋值语句、always语句和initial语句等。使用generate时,需要定义genvar作为generate的循环变量。其语法结构如下:

        接下来将提供3个示例代码来体会如何使用genvar以及generate。

示例代码1:

module vlg_design(
    input i_clk,
    input i_rst_n,
    input i_data,
    output o_data
);

    parameter DATA_SIZE=8;
    reg [DATA_SIZE-1:0] r_data;

    always @(posedge clk) begin
        r_data[0] <= i_data;
    end
    assign o_data = r_data[DATA_SIZE-1];

    genvar i;
    generate
        for(i=1; i<DATA_SIZE; i=i+1) begin
            always @(posedge i_clk) begin
                if(!i_rst_n) r_data[i] <= 1'b0;
                else r_data[i] <= r_data[i-1];
            end
        end
    endgenerate
endmodule

示例代码2:

module vlg_design #(parameter integer DATA_SIZE=8)
(    input i_clk,
     input i_en,
     output reg o_vld,
     input [DATA_SIZE-1:0] i_gray_code,
     output reg [DATA_SIZE-1:0] o_bin_data
);

always @(posedge i_clk) begin
    o_vld <= i_en;
end

genvar i;
generate 
    for(i=0; i<DATA_SIZE; i=i+1) begin
        always @(posedge i_clk) begin
            if(i_en) o_bin_data[i] <= ^i_gray_code[DATA_SIZE-1:i];
            else o_bin_data[i] <= 'b0;
        end
    end
endgenerate
endmodule

示例代码3:

module pulse_counter(
    input i_clk,
    input i_rst_n,
    input i_pulse,
    input i_en,
    output reg[15:0] o_pulse_cnt
);

reg [1:0] r_pulse;
wire w_rise_edge;

always @(posedge i_clk) begin
    if(!i_rst_n) r_pulse <= 2'b00;
    else r_pulse <= {r_pulse[0] , i_pulse};
end

assign w_rise_edge = r_pulse[0] & ~r_pulse[1];

always @(posedge i_clk) begin
    if(i_en) begin
        if(w_rise_edge) o_pulse_cnt <= o_pulse_cnt;
        else o_pulse_cnt <= o_pulse_cnt;
    end
    else o_pulse_cnt <= 'b0;
end
endmodule

module vlg_design(
    input i_clk,
    input i_rst_n,
    input [15:0] i_pulse,
    input i_en,
    output [15:0] o_pulse_cnt0,
    output [15:0] o_pulse_cnt1,
    output [15:0] o_pulse_cnt2,
    output [15:0] o_pulse_cnt3,
    output [15:0] o_pulse_cnt4,
    output [15:0] o_pulse_cnt5,
    output [15:0] o_pulse_cnt6,
    output [15:0] o_pulse_cnt7,
    output [15:0] o_pulse_cnt8,
    output [15:0] o_pulse_cnt9,
    output [15:0] o_pulse_cnta,
    output [15:0] o_pulse_cntb,
    output [15:0] o_pulse_cntc,
    output [15:0] o_pulse_cntd,
    output [15:0] o_pulse_cnte,
    output [15:0] o_pulse_cntf
);

wire [15:0] r_pulse_cnt [15:0];
genvar i;
generate
    for(i=0; i<16; i=i+1) begin
        pulse_counter uut1_pulse_counter(
            .i_clk(i_clk),
            .i_rst_n(i_rst_n),
            .i_pulse(i_pulse[i]),
            .i_en(i_en),
            .o_pulse_cnt(r_pulse_cnt[i])
        );
    end
endgenerate

assign o_pulse_cnt0=r_pulse_cnt[0];
assign o_pulse_cnt1=r_pulse_cnt[1];
assign o_pulse_cnt2=r_pulse_cnt[2];
assign o_pulse_cnt3=r_pulse_cnt[3];
assign o_pulse_cnt4=r_pulse_cnt[4];
assign o_pulse_cnt5=r_pulse_cnt[5];
assign o_pulse_cnt6=r_pulse_cnt[6];
assign o_pulse_cnt7=r_pulse_cnt[7];
assign o_pulse_cnt8=r_pulse_cnt[8];
assign o_pulse_cnt9=r_pulse_cnt[9];
assign o_pulse_cnta=r_pulse_cnt[a];
assign o_pulse_cntb=r_pulse_cnt[b];
assign o_pulse_cntc=r_pulse_cnt[c];
assign o_pulse_cntd=r_pulse_cnt[d];
assign o_pulse_cnte=r_pulse_cnt[e];
assign o_pulse_cntf=r_pulse_cnt[f];

endmodule

End!

### 解决PyCharm无法加载Conda虚拟环境的方法 #### 配置设置 为了使 PyCharm 能够成功识别并使用 Conda 创建的虚拟环境,需确保 Anaconda 的路径已正确添加至系统的环境变量中[^1]。这一步骤至关重要,因为只有当 Python 解释器及其关联工具被加入 PATH 后,IDE 才能顺利找到它们。 对于 Windows 用户而言,在安装 Anaconda 时,默认情况下会询问是否将它添加到系统路径里;如果当时选择了否,则现在应该手动完成此操作。具体做法是在“高级系统设置”的“环境变量”选项内编辑 `Path` 变量,追加 Anaconda 安装目录下的 Scripts 文件夹位置。 另外,建议每次新建项目前都通过命令行先激活目标 conda env: ```bash conda activate myenvname ``` 接着再启动 IDE 进入工作区,这样有助于减少兼容性方面的问题发生概率。 #### 常见错误及修复方法 ##### 错误一:未发现任何解释器 症状表现为打开 PyCharm 新建工程向导页面找不到由 Conda 构建出来的 interpreter 列表项。此时应前往 Preferences/Settings -> Project:...->Python Interpreter 下方点击齿轮图标选择 Add...按钮来指定自定义的位置。按照提示浏览定位到对应版本 python.exe 的绝对地址即可解决问题。 ##### 错误二:权限不足导致 DLL 加载失败 有时即使指定了正确的解释器路径,仍可能遇到由于缺乏适当的操作系统级许可而引发的功能缺失现象。特别是涉及到调用某些特定类型的动态链接库 (Dynamic Link Library, .dll) 时尤为明显。因此拥有管理员身份执行相关动作显得尤为重要——无论是从终端还是图形界面触发创建新 venv 流程均如此处理能够有效规避此类隐患。 ##### 错误三:网络连接异常引起依赖下载超时 部分开发者反馈过因网速慢或者其他因素造成 pip install 操作中途断开进而影响整个项目的初始化进度条卡住的情况。对此可尝试调整镜像源加速获取速度或是离线模式预先准备好所需资源包后再继续后续步骤。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值