数电-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
相关推荐
通信小呆呆3 小时前
当算法有了“五感”:多模态数据融合如何向人体感官协同学习?
人工智能·学习·算法·机器学习·机器人
H__Rick4 小时前
自动对焦学习-3
人工智能·学习·计算机视觉
Daisy Lee4 小时前
量化学习-第1章-什么是量化金融
学习·金融·datawhale
Alsn865 小时前
等待学习-学习目录:Docker 容器安全攻防
学习·安全·docker
YM52e5 小时前
买菜计算器小应用 - HarmonyOS ArkUI 开发实战-PC版本
学习·华为·harmonyos·鸿蒙·鸿蒙系统
小雨下雨的雨5 小时前
HarmonyOS ArkUI训练营入门-组件掌握系列-Animation 动画效果实现-PC版本
学习·华为·harmonyos·鸿蒙
cqbzcsq6 小时前
CellFlow虚拟细胞论文阅读
论文阅读·人工智能·笔记·学习·生物信息
YangYang9YangYan7 小时前
2026初入职场学习数据分析的价值
学习·数据挖掘·数据分析
guslegend7 小时前
理论学习:什么是 Coding Agent?
学习
自传.8 小时前
尚硅谷 Vibe Coding|第三章(1) Claude Code深度使用与进阶技巧 学习笔记
笔记·学习·尚硅谷·vibecoding