数电-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
相关推荐
IT=>小脑虎4 分钟前
2026版 Python零基础小白学习知识点【基础版详解】
开发语言·python·学习
李泽辉_1 小时前
深度学习算法学习(五):手动实现梯度计算、反向传播、优化器Adam
深度学习·学习·算法
星火开发设计1 小时前
C++ set 全面解析与实战指南
开发语言·c++·学习·青少年编程·编程·set·知识
坚持就完事了1 小时前
Linux的学习03:时间没有更新怎么解决
学习
李泽辉_1 小时前
深度学习算法学习(一):梯度下降法和最简单的深度学习核心原理代码
深度学习·学习·算法
im_AMBER2 小时前
Leetcode 99 删除排序链表中的重复元素 | 合并两个链表
数据结构·笔记·学习·算法·leetcode·链表
YangYang9YangYan2 小时前
中专大数据技术专业学习数据分析的价值分析
大数据·学习·数据分析
testpassportcn2 小时前
Fortinet FCSS_SDW_AR-7.4 認證介紹|Fortinet Secure SD-WAN 高級路由專家考試
网络·学习·改行学it
光影少年2 小时前
vite为什么速度快?
前端·学习
zhutoutoutousan2 小时前
氛围数学学习:用游戏化思维征服抽象数学
学习·算法·游戏