数电-Verilog HDL学习

环境配置

VSCode配置verilog环境(代码提示+自动例化+格式化)_vscode verilog-CSDN博客

VScode安装ctags - 庄泽波 - 博客园

基础语法

与软件编程(C、python)不同,Verilog是一门描述语言,代码描述的是电路的基本构成,多个always块、assign语句是并行执行的

模块

复制代码
// 定义一个名为 and_gate 的模块
module and_gate (
    input  a,    // 输入端口 a
    input  b,    // 输入端口 b
    output c     // 输出端口 c
);
    // 模块内部的逻辑描述
    assign c = a & b; // 连续赋值语句,c 等于 a 和 b 的按位与

endmodule // 模块结束

端口定义

输入输出属性(input/output)+类型(默认wire,此外还有reg类型)+变量名称

逻辑描述

变量声明

类型+位宽(默认为1)+变量名称

类型:

  • wire:线网类型,代表电路中的物理连接线
  • reg:寄存器类型

位宽:[N-1:0]

  • 比特矢量:位宽不为1的wire或reg类型
数值

<位宽>'<进制><数字>

位宽可省略不写

进制:b(二进制),o(八进制),d(十进制),h(十六进制)

复制代码
4'b1010
8'hFF
'HCA
运算符

& (与), | (或), ~ (非), ^ (异或),+ (加), - (减), == (相等),**? :(**条件运算符)

assign
复制代码
assign out = (sel == 2'b00) ? in0 : in1;
always

当敏感列表中的信号发生变化时,块内的语句就会执行 。

复制代码
always @(*) begin 
        if (sel == 1'b1) begin
            out = a;
        end else begin
            out = b;
        end
    end
  • 组合逻辑:@(*)

  • 时序逻辑:敏感列表里只有时钟或复位信号

    • posedge clk 时钟的上升沿

    • negedge clk 时钟的下降沿

  • 阻塞赋值 = 在always块内顺序赋值

  • 非阻塞赋值 <= 在always块内并行赋值

Modelsim仿真

用modelsim对Verilog进行仿真_modelsim仿真verilog-CSDN博客

复制代码
// 示例:测试一个简单的D触发器
module dff_tb;

    // 1. 声明信号
    reg clk;
    reg rst_n;
    reg d;
    wire q;
    
    // 2. 实例化被测试模块(DUT)
    dff u_dut (
        .clk(clk),
        .rst_n(rst_n),
        .d(d),
        .q(q)
    );
    
    // 3. 生成时钟
    initial begin
        clk = 0;
        forever #10 clk = ~clk;  // 20ns周期时钟
    end
    
    // 4. 测试序列
    initial begin
        // 初始化信号
        rst_n = 0;
        d = 0;
        
        // 复位释放
        #20 rst_n = 1;
        
        // 测试数据输入
        #20 d = 1;
        #20 d = 0;
        #20 d = 1;
        
        // 仿真运行一段时间后停止
        #100 $finish;
    end
    
    // 5. 监控输出
    initial begin
        $monitor("Time=%t, rst_n=%b, d=%b, q=%b", 
                 $time, rst_n, d, q);
    end
    
    // 6. 生成波形文件(可选)
    initial begin
        $dumpfile("wave.vcd");
        $dumpvars(0, dff_tb);
    end

endmodule
相关推荐
im_AMBER4 小时前
AI井字棋项目开发笔记
前端·笔记·学习·算法
zxguan4 小时前
Springboot 学习 之 下载接口 HttpMessageNotWritableException
spring boot·后端·学习
IT阳晨。5 小时前
【神经网络与深度学习(吴恩达)】神经网络基础学习笔记
深度学习·神经网络·学习
embrace996 小时前
【C语言学习】数据在内存中存储
java·c语言·开发语言·汇编·c++·学习·算法
LFly_ice8 小时前
学习React-25-React-路由懒加载
javascript·学习·react.js
程序员馨馨9 小时前
git常用命令学习以及冲突解决
git·功能测试·学习
yesyesido15 小时前
AI电脑配置推荐工具:智能匹配需求,一键生成个性化硬件方案
人工智能·科技·学习·程序人生·生活
我的xiaodoujiao17 小时前
使用 Python 语言 从 0 到 1 搭建完整 Web UI自动化测试学习系列 27--二次封装方法--优化断言结果
python·学习·测试工具·pytest
弈风千秋万古愁17 小时前
信号处理(一)噪声与滤波
学习·信号处理