数电-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 分钟前
AI Agent学习:MetaGPT之我的工作
人工智能·学习·flask
知识分享小能手17 分钟前
CentOS Stream 9入门学习教程,从入门到精通,Linux日志分析工具及应用 —语法详解与实战案例(17)
linux·学习·centos
2301_7833601342 分钟前
【学习笔记】关于RNA_seq和Ribo_seq技术的对比和BAM生成
笔记·学习
qq_3977315143 分钟前
Objective-C 学习笔记(第9章)
笔记·学习·objective-c
ujainu1 小时前
Python学习第一天:保留字和标识符
python·学习·标识符·保留字
sheji34161 小时前
【开题答辩全过程】以 基于Java的应急安全学习平台的设计与实现为例,包含答辩的问题和答案
java·开发语言·学习
喵了meme1 小时前
Linux学习日记21:读写锁
linux·c语言·学习
好奇龙猫1 小时前
日语学习-日语知识点小记-构建基础-JLPT-N3阶段-二阶段(29):第八科文法
学习
崇山峻岭之间2 小时前
C++ Prime Plus 学习笔记041
c++·笔记·学习
万岳科技系统开发2 小时前
私域直播小程序源码的整体架构设计与实现思路
学习·小程序