中级会员 
   
	- 积分
 - 494
 
        - 金钱
 - 494 
 
       - 注册时间
 - 2019-1-18
 
      - 在线时间
 - 101 小时
 
 
 
 | 
 
36金钱 
程序参考hs_ad_da例程,创建rom核存好正弦波的mif文件。加按键模块控制相位和频率后DA输出端没有波形。 
计划用key0控制相位,每按一次相位翻转180。实现原理用key_debounce模块检测key0下降沿,检测成功后将现在读rom的地址+ 8'd127,实现反相。key_debounce模块在da_wave_send模块中例化。实验结果DA输出-72.0mV直流信号。 
附上完整工程,望懂得问题出在哪里的大神赐教!!! 
 
//****************************************************************************************// 
 
module da_wave_send( 
    input                 clk         ,  //閺冨爼鎸 
    input                 rst_n       ,  //婢跺秳缍呮穱鈥冲娇閿涘奔缍嗛悽闈涢挬閺堝鏅 
 
    input                 key0_frq_up, 
    input                 key1_frq_down, 
    input                 key3_phase, 
 
    input         [7:0]    rd_data     ,  //ROM date 
    output   reg  [7:0]    rd_addr     ,  //ROM address 
    //DA閼侯垳澧栭幒銉ュ經 
    output                da_clk      ,  //DA(AD9708)妞瑰崬濮╅弮鍫曟寭,閺堚偓婢堆勬暜閹5Mhz閺冨爼鎸 
    output       [7:0]    da_data        //鏉堟挸鍤紒姗燗閻ㄥ嫭鏆熼幑  
); 
 
//parameter 
//妫版垹宸肩拫鍐Ν閹貉冨煑 
reg    [7:0]  FREQ_ADJ = 8'd10;  //棰戠巼鎺у埗瀛 
 
//reg define 
reg    [7:0]    freq_cnt  ;  //棰戠巼璁℃暟 
 
//***************************************************** 
//**                    main code  
//***************************************************** 
 
assign  da_clk = ~clk;        
assign  da_data = rd_data; 
 
//frq control 
always @(posedge clk or negedge rst_n) begin 
    if(rst_n == 1'b0) 
        freq_cnt <= 8'd0; 
    else if(freq_cnt == FREQ_ADJ)     
        freq_cnt <= 8'd0; 
    else          
        freq_cnt <= freq_cnt + 8'd1; 
end 
 
wire key3_phase_en; 
key_debouncer key3_debouncer(.clk(clk),.rst_n(rst_n),.key(key3_phase),.key_en(key3_phase_en)); 
 
//read ROM  
always @(posedge clk or negedge rst_n) begin 
    if(rst_n == 1'b0) 
        rd_addr <= 8'd0; 
    else if (freq_cnt == FREQ_ADJ) begin 
            rd_addr <= rd_addr + 8'd1; 
                        end 
    else if(key3_phase_en) begin 
            rd_addr <= rd_addr + 8'd127; 
                        end  
    else ;;                                         
end 
 
 
// frq control 
wire key0_frq_up_en; 
key_debouncer key0_debouncer(.clk(clk),.rst_n(rst_n),.key(key0_frq_up),.key_en(key0_frq_up_en)); 
 
always @(posedge clk or negedge rst_n) begin 
    if(rst_n == 1'b0) 
        FREQ_ADJ <= 8'd10; 
    else if (freq_cnt == key0_frq_up_en)  
        FREQ_ADJ <=  FREQ_ADJ + 8'd1; 
        else   
            FREQ_ADJ <= FREQ_ADJ; 
end 
 
endmodule 
 
//****************************************************************************************// 
 
 
 
//****************************************************************************************// 
module key_debouncer( 
 
    input clk, 
        input rst_n, 
    input key, 
        output key_en 
         
); 
reg   key_sync_0,key_sync_1; 
 
assign key_en=(~key_sync_0)&key_sync_1; 
 
always @(posedge clk or negedge rst_n) begin 
 
    if(rst_n == 1'b0) begin 
            key_sync_0<=1'b0; 
                key_sync_1<=1'b0; 
        end 
        else begin 
            key_sync_0<=key; 
            key_sync_1<=key_sync_0; 
        end 
         
end 
 
endmodule 
 
//****************************************************************************************// 
 
 
module pa_driver( 
 
    input sys_clk, 
    input sys_rst_n, 
 
    input key0, 
    input key1, 
    input key3_phase, 
         
    //DA interface 
    output                da_clk      ,  //DA(AD9708)clk,max 125Mhz 
    output    [7:0]       da_data       //data yo DA 
 
//    input                 ad_otr      ,  //0:閸︺劑鍣虹粙瀣瘱閸:鐡掑懎鍤柌蹇曗柤 
//    output                ad_clk         //AD(AD9280)妞瑰崬濮╅弮鍫曟寭,閺堚偓婢堆勬暜閹Mhz閺冨爼鎸 
 
); 
 
wire      [7:0]    rd_addr;              //ROM address 
wire      [7:0]    rd_data;              //ROM data 
//***************************************************** 
//**                    main code 
//***************************************************** 
 
//DA instantiation 
da_wave_send u_da_wave_send( 
    .clk         (sys_clk),  
    .rst_n       (sys_rst_n), 
    .key3_phase  (key3_phase), 
    .rd_data     (rd_data), 
    .rd_addr     (rd_addr), 
    .da_clk      (da_clk),   
    .da_data     (da_data) 
    ); 
 
//ROM instantiation 
rom_256x8b  u_rom_256x8b( 
    .address    (rd_addr), 
    .clock      (sys_clk), 
    .q          (rd_data) 
    ); 
 
endmodule 
 
 
//****************************************************************************************// 
 
 |   
 
 
 
 
 
 |