初级会员
- 积分
- 64
- 金钱
- 64
- 注册时间
- 2019-12-1
- 在线时间
- 18 小时
|
11金钱
module qsys_yu_yin_shi_bie(
input sys_clk,
input sys_rst_n,
//SDRAM interface
output sdram_clk,
output sdram_cke,
output sdram_cs_n,
output sdram_ras_n,
output sdram_cas_n,
output sdram_we_n,
output [1:0] sdram_ba,
output [12:0] sdram_addr,
output [ 1:0] sdram_dqm,
inout [15:0] sdram_data,
//EPCS FLASH interface
output epcs_dclk,
output epcs_sce,
output epcs_sdo,
input epcs_data0,
//LCD interface
inout [15:0] lcd_data,
output lcd_bl,
output lcd_cs_n,
output lcd_wr_n,
output lcd_rd_n,
output lcd_rs,
output lcd_rst_n,
//key interface
input [3:0] key,
output [3:0] led,
//WM8978 interface
input adu_bclk, //WM8978位时钟
input aud_lrc, //对齐信号
input aud_adcdat, //音频输入
output aud_mclk, //WM8978主时钟
output aud_dacdat, //音频输出
output aud_scl, //WM8978的SCL信号
inout aud_sda //WM8978的SDA信号
);
parameter TIME_RECORD = 24'd5760000; // 60秒
wire [15:0] dac_data ; // FPGA发送的音频数据
wire wr_en ; // SDRAM fifo接口写入数据使能
wire [15:0] wr_data ; // SDRAM fifo接口写入数据
wire rd_en ; // SDRAM fifo接口读出数据使能
wire clk_100m ;
wire clk_100m_shift ;
wire rst_n ;
wire locked ;
wire clk_2m ;
wire [15:0] rd_data ; // SDRAM fifo读出的数据
wire sdram_init_done ; // SDRAM 初始化完成信号
wire neg_play_key ; // 录音键的下降沿
wire wr_load ; // 写地址寄存 & fifo清空
wire rx_done ; // 音频数据接收完成
wire tx_done ; // 音频数据发送完成
wire record_key ; // 消抖后的key0
wire play_key ; // 消抖后的key1
wire [15:0] adc_data ; // FPGA接收的音频数据
wire [ 3:0] key_value ; // 按键消抖后的输出
assign rst_n = sys_rst_n & locked;
assign sdram_clk = clk_100m_shift;
assign aud_mclk = clk_2m;
//PLL_clk
pll_clk u_pll_clk(
.areset (~sys_rst_n),
.inclk0 (sys_clk),
.c0 (clk_100m),
.c1 (clk_100m_shift),
.c2 (clk_2m),
.locked (locked)
);
yu_yin_shi_bie u_yu_yin_shi_bie(
.clk_clk (sys_clk),
.reset_reset_n (sys_rst_n),
.epcs_dclk (epcs_dclk),
.epcs_sce (epcs_sce),
.epcs_sdo (epcs_sdo),
.epcs_data0 (epcs_data0),
.lcd_data_export (lcd_data),
.lcd_bl_export (lcd_bl),
.lcd_cs_n_export (lcd_cs_n),
.lcd_rd_n_export (lcd_rd_n),
.lcd_rs_export (lcd_rs),
.lcd_rst_n_export (lcd_rst_n),
.lcd_wr_n_export (lcd_wr_n),
.sdram_32m_addr (sdram_addr),
.sdram_32m_ba (sdram_ba),
.sdram_32m_cas_n (sdram_cas_n),
.sdram_32m_cke (sdram_cke),
.sdram_32m_cs_n (sdram_cs_n),
.sdram_32m_dq (sdram_dq),
.sdram_32m_dqm (sdram_dqm),
.sdram_32m_ras_n (sdram_ras_n),
.sdram_32m_we_n (sdram_we_n),
.key_export (key),
.led_export (led)
);
//例化WM89878控制模块
wm8978_ctrl u_wm8978_ctrl(
//system clock
.clk (sys_clk ), // 时钟信号
.rst_n (rst_n ), // 复位信号
//wm8978 interface
//audio interface(master mode)
.aud_bclk (aud_bclk ), // WM8978位时钟
.aud_lrc (aud_lrc ), // 对齐信号
.aud_adcdat (aud_adcdat ), // 音频输入
.aud_dacdat (aud_dacdat ), // 音频输出
//control interface
.aud_scl (aud_scl ), // WM8978的SCL信号
.aud_sda (aud_sda ), // WM8978的SDA信号
//user interface
.dac_data (dac_data ), // 输出的音频数据
.adc_data (adc_data ), // 录音的数据
.rx_done (rx_done ), // 一次接收完成
.tx_done (tx_done ) // 一次发送完成
);
//例化消抖模块
key_debounce u_key_debounce(
.sys_clk (sys_clk ), // 外部50M时钟
.sys_rst_n (rst_n ), // 复位信号,低有效
.key (key ), // 外部按键输入
.key_flag (), // 按键数据有效信号
.key_value (key_value ) // 按键消抖后的数据
);
//SDRAM 控制器顶层模块,封装成FIFO接口
//SDRAM 控制器地址组成: {bank_addr[1:0],row_addr[12:0],col_addr[8:0]}
sdram_top u_sdram_top(
.ref_clk (clk_100m), // sdram 控制器参考时钟
.out_clk (clk_100m_shift), // 用于输出的相位偏移时钟
.rst_n (rst_n ), // 系统复位,低电平有效
//用户写端口
.wr_clk (aud_bclk), // 写端口FIFO: 写时钟
.wr_en (wr_en ), // 写端口FIFO: 写使能
.wr_data (wr_data ), // 写端口FIFO: 写数据
.wr_min_addr (24'd0 ), // 写SDRAM的起始地址
.wr_max_addr (TIME_RECORD), // 写SDRAM的结束地址
.wr_len (10'd512 ), // 写SDRAM时的数据突发长度
.wr_load (wr_load ), // 写端口复位: 复位写地址,清空写FIFO
//用户读端口
.rd_clk (aud_bclk), // 读端口FIFO: 读时钟
.rd_en (rd_en ), // 读端口FIFO: 读使能
.rd_data (rd_data ), // 读端口FIFO: 读数据
.rd_min_addr (24'd0 ), // 读SDRAM的起始地址
.rd_max_addr (TIME_RECORD), // 读SDRAM的结束地址
.rd_len (10'd512 ), // 从SDRAM中读数据时的突发长度
.rd_load (neg_play_key), // 读端口复位: 复位读地址,清空读FIFO
//用户控制端口
.sdram_read_valid (1'b1 ), // SDRAM 读使能
.sdram_init_done (sdram_init_done), // SDRAM 初始化完成标志
//SDRAM 芯片接口
.sdram_clk (sdram_clk ), // SDRAM 芯片时钟
.sdram_cke (sdram_cke ), // SDRAM 时钟有效
.sdram_cs_n (sdram_cs_n), // SDRAM 片选
.sdram_ras_n (sdram_ras_n), // SDRAM 行有效
.sdram_cas_n (sdram_cas_n), // SDRAM 列有效
.sdram_we_n (sdram_we_n), // SDRAM 写有效
.sdram_ba (sdram_ba ), // SDRAM Bank地址
.sdram_addr (sdram_addr), // SDRAM 行/列地址
.sdram_data (sdram_data), // SDRAM 数据
.sdram_dqm (sdram_dqm ) // SDRAM 数据掩码
);
//例化录音控制模块
record_ctrl #(.TIME_RECORD (TIME_RECORD)
) u_record_ctrl(
//system clock
.clk (aud_bclk ), // 时钟信号(12MHz)
.rst_n (rst_n ), // 复位信号
//SDRAM interface
.wr_data (wr_data ), // SDRAM fifo接口写入数据
.rd_data (rd_data ), // SDRAM fifo读出的数据
.wr_en (wr_en ), // SDRAM fifo接口写入数据使能
.wr_load (wr_load ), // 写地址寄存 & fifo清空
.rd_en (rd_en ), // SDRAM fifo接口读出数据使能
.sdram_init_done (sdram_init_done), // SDRAM 初始化完成信号
//user interface
.adc_data (adc_data ), // FPGA接收的音频数据
.dac_data (dac_data ), // FPGA发送的音频数据
.record_key (key_value[2]), // 消抖后的key0做为录音按键
.play_key (key_value[1]), // 消抖后的key1做为播放按键
.rx_done (rx_done ), // 音频数据接收完成
.tx_done (tx_done ), // 音频数据发送完成
.neg_play_key (neg_play_key) // 录音键的下降沿
);
endmodule
|
-
|