学习日记 Day2

昨日事情多,空一天。今日不想学,但有亏与心,故打算做一点。

今日做的事情也比较杂:

1.先是完善上次没写完的代码,补充了一些功能,用那个网站跑了个仿真,但还没细看。加上今日不太想学,故草草收场。但好在,day1遇到的不懂的地方知道咋回事了。

2.了解了一下pds软件怎么用的,因为后续还是要在软件上做一些操作(这个网站可能更适合分享一些工程给别人看,但目前我觉得便利性好像也不是很强,因为一开始在软件上弄,搞到网站上还要加一些指定宏),而且debug软件会更方便。但是找了几个教程,感觉质量都挺差的,csdn还全是收费的,无语。

3.不能在for循环里面像for (integer i =0;.....)这样,会报错(起码这个网站会),要拿出去声明。

4.麻蛋的,数模国赛凉凉,返回来想,还是眼高手低了,步子迈太大,扯着蛋了。

今日到此为止,下播,进度如下:
 

`timescale 1ns/1ns

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, // 采集完成标志
    output reg [7:0] freq_spectrum_out, // 频谱数据输出
    output reg [3:0] freq_spectrum_index // 频谱数据索引
);
	integer j = 0;
    
    reg [2:0] signal_buffer[0:9]; // 信号缓冲区
    integer i = 0; // 缓冲区索引
    reg [7:0] freq_spectrum[0:9]; // 频谱数据

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

    // 简易频谱分析(示例性,实际实现需要更复杂的逻辑)
    always @(posedge clk or negedge rst_n) begin
        if (!rst_n) begin
            captured_signals <= 3'b000;
        end else if (capture_done) begin
            // 进行FFT处理
            for (j = 0; j < 10; j++) begin
                freq_spectrum[j] = fft(signal_buffer[j]);
            end
            captured_signals <= signal_buffer[0]; // 暂存第一个样本作为示例
            freq_spectrum_index <= 0; // 初始化频谱索引
            freq_spectrum_out <= freq_spectrum[0]; // 输出第一个频谱数据
        end else if (freq_spectrum_index < 10) begin
            freq_spectrum_index <= freq_spectrum_index + 1;
            freq_spectrum_out <= freq_spectrum[freq_spectrum_index];
        end
    end

    // FFT函数(示例性,实际实现需要更复杂的逻辑)
    function [7:0] fft(input [2:0] signal);
        begin
            // 这里可以添加FFT算法的实现
            fft = 8'h00; // 示例性返回值
        end
    endfunction
endmodule

`timescale 1ns/1ns
//----------------Testbench-----------------
module top_module();
    reg clk;
    reg rst_n;
    reg start_capture;
    reg [2:0] signals;
    wire [2:0] captured_signals;
    wire capture_done;
    wire [7:0] freq_spectrum_out;
    wire [3:0] freq_spectrum_index;
	initial `probe_start;
    integer k = 0;
    // 实例化采集模块
    SignalCapture sc (
        .clk(clk),
        .rst_n(rst_n),
        .start_capture(start_capture),
        .signals(signals),
        .captured_signals(captured_signals),
        .capture_done(capture_done),
        .freq_spectrum_out(freq_spectrum_out),
        .freq_spectrum_index(freq_spectrum_index)
    );

    // 生成时钟信号
    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);
            // 这里可以添加代码来处理采集到的信号
            for (k = 0; k < 10; k++) begin
                #10 $display("Freq Spectrum %d: %h", k, freq_spectrum_out);
            end
        end
        #10 $finish; // 结束仿真
    end
    
    // 使用`probe`宏来在时序图中展示信号
    `probe(clk);
    `probe(rst_n);
    `probe(start_capture);
    `probe(signals);
    `probe(captured_signals);
    `probe(capture_done);
    
endmodule

明日计划:

1.把仿真图看明白了,然后完善代码,起码频谱分析功能搞定。

2.继续搜搜pds教程,太怪异了

3.高项的话,看着做吧,优先第二周任务

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值