学习日记 day 1

今天主要是找了个能在线verilog仿真的网站,学习了怎么使用,搞了个具有示波器功能,能进行信号的采集和显示,并能控制信号进行采集,能对信号进行 简易频谱分析,能改变信号的显示刻度,调整示波器的精度,代码如下:

//--------------RTL------------------
module SignalCapture( 
    input wire clk,
    input wire rst_n,
    input wire start_capture, // 控制信号采集的开始
    input wire [2:0] signals, // 假设采集3位宽的数字信号
    output reg [2:0] captured_signals, // 采集信号
    output reg capture_done // 采集完成标志
);

    reg [2:0] signal_buffer[0:9]; // 信号缓冲区
    integer i = 0; // 缓冲区索引

    // 控制信号采集
    always @(posedge clk or negedge rst_n) begin
        if (!rst_n) begin
            i <= 0;
            capture_done <= 0;
            captured_signals <= 3'b000;
        end else if (start_capture) begin
            if (i < 10) begin
                signal_buffer[i] <= signals; // 采集信号
                i <= i + 1;
            end
            capture_done <= (i >= 3); // 采集完成标志
        end
    end

    // 简易频谱分析(示例性,实际实现需要更复杂的逻辑)
    always @(posedge clk or negedge rst_n) begin
        if (!rst_n) begin
            captured_signals <= 3'b000;
        end else if (capture_done) begin
            captured_signals <= signal_buffer[0]; // 暂存第一个样本作为示例
        end
    end
endmodule





`timescale 1ns/1ns
//----------------Testbench-----------------
module top_module();
    reg clk;
    reg rst_n;
    initial `probe_start; 
    reg start_capture;
    reg [2:0] signals;
    wire [2:0] captured_signals;
    wire capture_done;

    // 实例化采集模块
    SignalCapture sc (
        .clk(clk),
        .rst_n(rst_n),
        .start_capture(start_capture),
        .signals(signals),
        .captured_signals(captured_signals),
        .capture_done(capture_done)
    );

    // 生成时钟信号
    initial begin
        clk = 0;
        forever #5 clk = ~clk; // 产生周期为10单位时间的时钟信号
    end

    // 初始化并提供测试信号
    initial begin
        rst_n = 0; // 复位
        #10;
        rst_n = 1; // 释放复位
        #10;
        start_capture = 0;
        signals = 3'b000;
        #10;
        start_capture = 1; // 开始信号采集
        #10 signals = 3'b001;
        #10 signals = 3'b010;
        #10 signals = 3'b011;
        #10 signals = 3'b100;
        #10 signals = 3'b101;
        #10 signals = 3'b110;
        #10 signals = 3'b111;
        #10 start_capture = 0; // 停止信号采集
        #10;
        if (capture_done) begin
            $display("Capture Done at %t", $time);
            // 这里可以添加代码来处理采集到的信号
        end
        #10 $finish; // 结束仿真
    end

    // 使用`probe`宏来在时序图中展示信号
    `probe(clk);
    `probe(rst_n);
    `probe(start_capture);
    `probe(signals);
    `probe(captured_signals);
    `probe(capture_done);
endmodule

但是仿真产生的波形图却是这样的:

captured_signals始终没有抓取到信号,它是从缓冲区获得的,明天再具体看看代码逻辑哪里有问题,明天早八,今天太晚了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值