数电-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
相关推荐
551只玄猫8 小时前
【基于python的金融分析和风险管理 学习笔记】中阶篇 第6章 分析利率和汇率
笔记·python·学习·金融·学习笔记·汇率·利率
孤独的小丑8 小时前
OpenClaw学习资源汇编
汇编·学习
悠哉悠哉愿意8 小时前
【单片机学习笔记】第十二届国赛经验复盘
笔记·单片机·嵌入式硬件·学习
zxm85138 小时前
UV使用及UV与Anaconda的区别
大数据·学习·机器学习·uv
Shining05968 小时前
AI 编译器系列(五)《拓展 Triton 深度学习编译器——DLCompiler》
人工智能·深度学习·学习·其他·架构·ai编译器·infinitensor
码农的小菜园8 小时前
Java线程池学习笔记
java·笔记·学习
我不是程序猿儿9 小时前
【嵌入式】编码器计数倍频,机械一格与电气计数
stm32·单片机·嵌入式硬件·学习
阳光永恒7369 小时前
C++编程全套学习资料免费分享 | 从零基础到进阶(含视频课/PPT课件/源码/项目实战)
c++·学习·编程学习·免费资料·零基础学c++·c++资料
Дерек的学习记录9 小时前
Unreal Engine 5:前置知识和入门基础
学习·ue5
EnglishJun9 小时前
ARM嵌入式学习(八)--- 汇编应用:点亮led
汇编·arm开发·学习