405|0

4

帖子

0

TA的资源

一粒金砂(中级)

为什么quartus仿真不出波形啊啊啊啊球球大佬帮忙看一下呗 [复制链接]

 RTL视图

image.png

 

顶层模块

image.png  

 

dds正弦波信号发生模块

module    dds_noip(
    input    wire        sclk,
    input    wire        rst_n,
    input wire [7:0]    FW,
    output    wire    [7:0]    o_wave,
    output   reg  out
);

parameter    FRQ_W=32'd85899346;        //相当于M
parameter    FRQ_ADD=32'd85899346/2;//相当于递增量
reg        [31:0]    phase_sum;
wire    [8:0]    addr;
reg        [31:0]    frq_word;
reg        [6:0]    div_cnt;
reg                div_flag;


always @(posedge sclk or negedge rst_n)
    if(rst_n == 1'b0)
        phase_sum <= 1'd0;
    else 
        phase_sum <= phase_sum + FRQ_W/FW;
    
assign addr = phase_sum[31:23];


        
always @(posedge sclk or negedge rst_n)
    if(rst_n == 1'b0)
        out <= 0;
    else if(o_wave>128)
       out <= 1;
    else 
        out <= 0;

rom_512x8     rom_512x8_inst(
    .address(addr),
     .clock(sclk),
     .rst(rst_n),
     .q(o_wave)
     );
     
endmodule

 

rom模块

 

module rom_512x8 (
    address,
    clock,
    rst,
    q
    );
    input    [8:0]  address;
    input      clock;
    input   rst;
    output reg [7:0]  q;
    
parameter SINE_FILE = "sine.txt"; 

reg [7:0] sine_rom [511:0];       

initial
begin
$readmemh(SINE_FILE, sine_rom); 
end

always@(posedge clock,negedge rst)
begin

if(!rst)
begin
q<=8'b0;
end

else 
begin
q<=sine_rom[address];
end


end

endmodule

 

uart串口接收模块

module uart_rx(
                        clk,
                        res,
                        RX,
                        data_out,
                        en_data_out
                        );
 
input                    clk;
input                    res;
input                    RX;
output[7:0]       data_out;//接收字节输出
output                en_data_out;//输出使能
 
reg[7:0]                state;//主状态机
reg[12:0]                con;//用于计算比特宽度;
//系统时钟频率24兆赫兹(24,000,000),支持4800波特率
//计数24000000/4800=5000(0001 0011 1000 1000),13位
//1.5倍宽度,5000*1.5=7500,算8000(0001 1111 0100 0000),13位
reg[4:0]                con_bits;//用于计算比特数,计转了多少圈
 
reg                        RX_delay;//RX延时
reg                     en_data_out;
 
reg[7:0]                data_out;
 
always@(posedge clk or negedge res)
 
if(~res)begin
    state<=0;con<=0;con_bits<=0;RX_delay<=0;
    data_out<=0;en_data_out<=0;
end
else begin
 
RX_delay<=RX;//有时钟就在动,不需要条件
 
 
    case(state)
    0://等空闲,10个bit以上连续的1
    begin
            if(con==5000-1)begin
                con<=0;//计数转了一圈
            end
            else begin
                con<=con+1;
            end
            if(con==0)begin
                if(RX)begin
                    con_bits<=con_bits+1;
                end
                else begin
                    con_bits<=0;
                end
        end
        
        if(con_bits==12)begin
            state<=1;
        end
    end
    
    1://等起始位;
    begin
    en_data_out<=0;
        if(~RX&RX_delay)begin
            state<=2;
        end
    end
    2://收最低位b0;
    begin
            //要等1.5Tbit,5000*1.5=7500
            if(con==7500-1)begin
                con<=0;
                data_out[0]<=RX;
                state<=3;
            end
            else begin
                con<=con+1;        
            end
    end
    3://收最低位b1;
    begin
    //要等1Tbit,5000*1=5000
            if(con==5000-1)begin
                con<=0;
                data_out[1]<=RX;
                state<=4;
            end
            else begin
                con<=con+1;        
            end
    end
    4://收最低位b2
    begin
    //要等1Tbit,5000*1=5000
            if(con==5000-1)begin
                con<=0;
                data_out[2]<=RX;
                state<=5;
            end
            else begin
                con<=con+1;        
            end
    end
    5://收最低位b3
    begin
    //要等1Tbit,5000*1=5000
            if(con==5000-1)begin
                con<=0;
                data_out[3]<=RX;
                state<=6;
            end
            else begin
                con<=con+1;        
            end
    end
    6://收最低位b4
    begin
    //要等1Tbit,5000*1=5000
            if(con==5000-1)begin
                con<=0;
                data_out[4]<=RX;
                state<=7;
            end
            else begin
                con<=con+1;        
            end
    end
    7://收最低位b5
    begin
    //要等1Tbit,5000*1=5000
            if(con==5000-1)begin
                con<=0;
                data_out[5]<=RX;
                state<=8;
            end
            else begin
                con<=con+1;        
            end
    end
    8://收最低位b6
    begin
    //要等1Tbit,5000*1=5000
            if(con==5000-1)begin
                con<=0;
                data_out[6]<=RX;
                state<=9;
            end
            else begin
                con<=con+1;        
            end
    end
    9://收最低位b7
    begin
    //要等1Tbit,5000*1=5000
            if(con==5000-1)begin
                con<=0;
                data_out[7]<=RX;
                state<=10;
            end
            else begin
                con<=con+1;        
            end
    end
    10://产生使能脉冲
    begin
        en_data_out<=1;
        state<=1;
    end
    
    default://其他未定义状态
    begin
        state<=0;
        con<=0;
        con_bits<=0;
        en_data_out<=0;
    
    end
    
    
    endcase
 
end
 
endmodule
 

rom的初始化文件也都放在和db、modelsim同级目录下面了,还是不是到什么问题,是模块连接的问题吗

 

 

 

 


回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

关闭
站长推荐上一条 1/10 下一条

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表