📄 logic.v
字号:
module IF_logic ( RESET,PCLK,
AD_OVR,ADCLK,DR_OUT,AD, //AD6644接口
S_A,S_IO,S_OE,S_WE,S_CE1,S_CE2, //SRAM接口
USBTXE,USBRXF,USBWR,USBRD,USBD,USBRESET, //USB接口
ARM, //ARM接口
BA,BD,XF0,XF1,PAGE2IO,R_WIO,_RDYIO,_DBDIR,_CSDB, //DSP接口
SCL,SDA,
LED1,LED2
);
//时钟,指示
input RESET,PCLK;
output LED1,LED2;
//AD6644接口
input AD_OVR,DR_OUT;
input [13:0]AD;
output ADCLK;
//SRAM接口
output [19:0]S_A;
inout [15:0]S_IO;////////////////////////////////////////////////////
output S_OE,S_WE,S_CE1,S_CE2;
//USB接口
input USBTXE,USBRXF;
output USBWR,USBRD,USBRESET;
inout [7:0]USBD;
//ARM接口
input [19:0]ARM;
//DSP接口
input [7:0]BA;
inout [15:0]BD;
output _RDYIO,_DBDIR,_CSDB;
input PAGE2IO,R_WIO,XF1,XF0;
/*XF0,XF1:两个与外部CPU握手信号,输入/输出:2
//PAGE2,PAGE3:地址段片选信号,输出:1
//BA0-23:24个地址线,输入/输出:8
//BD0-31:32个数据线,输入/输出:16
//R/WIO:读写信号,输出:1
//_RDYIO:准备好信号,输入:1
//_DBDIR双向BUF数据流方向信号,输入:1
//_CSDB 双向BUF使能信号,输入:1
*/
//EEPROM
output SCL;
inout SDA;
/*************************时钟分频 PCLK=20M****************************/
reg div2_clk,div4_clk,div8_clk,div16_clk;
always @(posedge PCLK) //PCLK=20M
div2_clk <= ~div2_clk; //10M
always @(posedge div2_clk)
div4_clk <= ~div4_clk; //5M
always @(posedge div4_clk)
div8_clk <= ~div8_clk; //2.5M
always @(posedge div8_clk)
div16_clk <= ~div16_clk; //1.25M
//////////////////////////////////////////
wire CLK_40M;
altpll_IF altpll_IF_inst (
.inclk0 ( PCLK ),
.c0 ( CLK_40M )
);
assign ADCLK = CLK_40M;
/**************************reset******************************/
reg reset;
/*********************SRAM读写控制使能***************************/
reg sample_to_SRAM_en;//??????????????????
reg read_SRAM_en; //??????????????????
reg read_sram_CLK; //??????????????????
/**************************AD6644 to sram*****write sram********************/
reg reg_DRY;
reg start_WRsram;
reg [13:0]reg_AD;
reg [15:0]reg_S_IO;
always @(DR_OUT) //转换好时钟
if (DR_OUT)
reg_DRY <= 1'b1;
else
reg_DRY <= 1'b0;
always @(posedge reg_DRY or negedge reset) //转换锁存
if (~reset)
begin
reg_AD <= 0;
start_WRsram <= 1'b0;
end
else if(sample_to_SRAM_en == 1)
begin
reg_AD <= AD;
start_WRsram <= 1'b1;
end
else
begin
reg_AD <= 0;
start_WRsram <= 1'b0;
end
assign S_IO = (sample_to_SRAM_en == 1) ? {reg_AD,1'b0,1'b0} : 16'bzzzzzzzzzzzzzzzz;//ADC data to sram//
wire RD_S_CE1,RD_S_CE2; //读片选
reg [20:0]reg_addr_wr,reg_addr_rd; //SRAM读、写地址寄存器
reg WR_full_flag;
always @(posedge reg_DRY or negedge reset) //SRAM写地址控制
if (~reset)
reg_addr_wr <= 0;
else if ((start_WRsram == 1) && (reg_addr_wr < 21'b111111111111111111111))
reg_addr_wr <= reg_addr_wr + 1'b1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -