📄 gateen.v
字号:
//这里由于帧输出,积累到8-10个PRF点数后,高低重频的PRF点数还不相同,//因此输出到DPC_ram的地址如何处理?//由于DPC_RAM的组成有2块拼接的,前64K,后16K;片选的输出状态要考虑;module gate_en(// CLK_50M, CLK_24M, CLK_33M, CLK_MOD, CLK_DA1,// CLK_FPGA, FRAME_SYN, RESET,// prf_in, //?没被使用? PRF_SEL, work_mode, core_enable, core_busy, //因为乒乓操作是按PRF来做的,一个PRF做乒,下一个做乓, core_ready, //rfd; core_d_valid,// frame_prf_num, //?没被使用? out_index, sel_ad_out, //按PRF翻转,最好在CORE_BUSY后就切换; //这里不转接CORE地址,主要是考虑避免额外的延时; //因为外部地址由定时FPGA产生,所以不需额外产生地址。 read_ad, cs_ad, read_ad_en, DPC_OUT_CS_P1, //按帧同步操作,积累到8-10个PRF转换输RAM区-64K; DPC_OUT_CS_P2, //-16K; DPC_OUT_CS_Q1, //按帧同步操作,积累到8-10个PRF转换输出乓RAM区-64K; DPC_OUT_CS_Q2, //-16K; DPC_WEP, //DPC写乒RAM; DPC_WEQ, //DPC写乓RAM; DPC_OUT_ADDR, DSP_IN_CS_P1, DSP_IN_CS_P2, DSP_IN_CS_Q1, DSP_IN_CS_Q2, REF_RAM4K_SEL, REF_RAM8K_SEL, DPC_SEL_PQ, ADSP_MS, test );//input CLK_50M;input CLK_24M;input CLK_33M;input RESET;input FRAME_SYN;input core_busy;input core_ready; //1有效input core_d_valid;input work_mode;//input prf_in;//input [4:0] frame_prf_num;input [12:0] out_index;input PRF_SEL; input [2:0] ADSP_MS;output CLK_MOD;output CLK_DA1;//output CLK_FPGA;output sel_ad_out;output DPC_OUT_CS_P1; //0有效;output DPC_OUT_CS_P2;output DPC_OUT_CS_Q1;output DPC_OUT_CS_Q2;output DSP_IN_CS_P1; //0有效;output DSP_IN_CS_P2;output DSP_IN_CS_Q1;output DSP_IN_CS_Q2;output DPC_WEP;output DPC_WEQ;output[15:0] DPC_OUT_ADDR;output REF_RAM4K_SEL;output REF_RAM8K_SEL;output core_enable;output read_ad; //rfd 触发;output cs_ad; //可强制为0;有效output read_ad_en; //rfd 触发,0有效output DPC_SEL_PQ;output [7:0] test;reg CLK_MOD;reg CLK_DA1;//reg [15:0] clksum1;reg [15:0] clksum2;reg sel_ad_out;reg DPC_OUT_CS_P1;reg DPC_OUT_CS_P2;reg DPC_OUT_CS_Q1;reg DPC_OUT_CS_Q2;wire DSP_IN_CS_P1;wire DSP_IN_CS_P2;wire DSP_IN_CS_Q1;wire DSP_IN_CS_Q2;reg cs_ad;reg DPC_SEL_PQ; //1:P channel 0:Q channelreg[4:0] busy_cnt; reg DPC_RAM_SEL;reg[2:0] DPC_ADDR_BASE1; //共16位;可以通过预制相应地址线实现超出范围地址的寻址;前64K;reg[2:0] DPC_ADDR_BASE2; //共16位;后16Kwire[2:0] DPC_ADDR_BASE;wire DPC_ADDR_SWITCH; wire core_busy_negedge;wire FRAME_SYN_posedge;wire REF_RAM4K_SEL;wire REF_RAM8K_SEL;reg core_enable;wire read_ad;wire read_ad_en;reg [15:0] DPC_OUT_ADDR;wire DPC_WEP;wire DPC_WEQ;reg core_busy_delay;reg FRAME_SYN_delay;//reg CLK_FPGA;reg temp;reg temp_delay;wire prf_cnt_posedge; wire [7:0] test; wire DSP_CS_1;wire DSP_CS_2;reg [15:0] DPC_OUT_ADDR1;
reg [15:0] DPC_OUT_ADDR2;reg [15:0] DPC_OUT_ADDR3;assign prf_cnt_posedge =(temp)&&(~temp_delay);assign DPC_ADDR_SWITCH =(((PRF_SEL==0)&&(prf_cnt_posedge))||((PRF_SEL==1)&&(prf_cnt_posedge)))?1'b1:1'b0; assign core_busy_negedge =(core_busy_delay)&&(~core_busy);assign FRAME_SYN_posedge =(~FRAME_SYN_delay)&&(FRAME_SYN);assign REF_RAM4K_SEL =(PRF_SEL==1'b0)?1'b0:1'b1;assign REF_RAM8K_SEL =(PRF_SEL==1'b0)?1'b1:1'b0;//assign core_enable =(work_mode==1'b1)?1'b0:1'b1; //脉压不脉压由这里控制;assign read_ad =(core_ready==1'b1)?1'b1:1'b0;assign read_ad_en =(core_ready==1'b1)?1'b1:1'b0;assign DPC_ADDR_BASE =(DPC_RAM_SEL==1'b1)?DPC_ADDR_BASE1:DPC_ADDR_BASE2;//assign DPC_OUT_ADDR ={3'b0,out_index}; //地址组合;测试用//assign DPC_OUT_ADDR1 ={DPC_ADDR_BASE,out_index}; //地址组合?assign DPC_WEP =((core_d_valid==1'b1)&&(DPC_SEL_PQ==1'b1))?CLK_50M:1'b1; //0有效;PRAM写
always@(posedge CLK_33M or negedge RESET) if(!RESET) DPC_OUT_ADDR1<=1'b0; else DPC_OUT_ADDR1<={DPC_ADDR_BASE,out_index};
always@(posedge CLK_33M or negedge RESET) if(!RESET) DPC_OUT_ADDR2<=1'b0; else DPC_OUT_ADDR2<=DPC_OUT_ADDR1;
always@(posedge CLK_33M or negedge RESET) if(!RESET) DPC_OUT_ADDR3<=1'b0; else DPC_OUT_ADDR3<=DPC_OUT_ADDR2;
always@(posedge CLK_33M or negedge RESET) if(!RESET) DPC_OUT_ADDR<=1'b0; else DPC_OUT_ADDR<=DPC_OUT_ADDR3;
assign DPC_WEQ =((core_d_valid==1'b1)&&(DPC_SEL_PQ==1'b0))?CLK_33M:1'b1; //0有效;QRAM写 assign DPC_WEP =((core_d_valid==1'b1)&&(DPC_SEL_PQ==1'b1))?CLK_33M:1'b1;assign test[0] =DPC_ADDR_BASE2[0];//DSP_IN_CS_P2;// //9assign test[1] =DPC_ADDR_BASE2[1];//DPC_WEP;//DPC_RAM_SEL; //10assign test[3] =DPC_ADDR_SWITCH; // DPC_WEQ;// //11assign test[2] =DPC_ADDR_BASE2[2];//; DSP_CS_1;// //12assign test[4] =DPC_RAM_SEL;//FRAME_SYN;// DSP_CS_2;// //13assign test[5] =DPC_ADDR_BASE1[0];//prf_cnt_posedge; //DSP_IN_CS_Q1;// //14assign test[6] =DPC_ADDR_BASE1[1];//DSP_IN_CS_Q2;//PRF_SEL; //15assign test[7] =DPC_ADDR_BASE1[2];//DSP_IN_CS_P1;//core_busy_negedge; //16assign DSP_CS_1 =(ADSP_MS[2:1]==2'b01)?1'b1:1'b0;assign DSP_CS_2 =(ADSP_MS[2:1]==2'b10)?1'b1:1'b0;always@(busy_cnt) if(busy_cnt==5'h8) //if(busy_cnt==5'ha) //应该是8的时候翻一次,8*8K=64K; temp=1'b1; else temp=1'b0;always@(posedge CLK_33M or negedge RESET) if(!RESET) temp_delay<=1'b0; else temp_delay<=temp; always@(posedge CLK_33M or negedge RESET) //core就使能 if(!RESET) core_enable <=1'b1; else core_enable <=1'b1;always@(posedge CLK_33M or negedge RESET) if(!RESET) begin DPC_ADDR_BASE1 <=3'h0; DPC_ADDR_BASE2 <=3'h0; end else if(FRAME_SYN_posedge==1) //1010+,考虑在桢同步下,DPC基地址要复位; begin DPC_ADDR_BASE1 <=3'h0; DPC_ADDR_BASE2 <=3'h0; end else if(core_busy_negedge ==1) if(DPC_RAM_SEL ==1'b1) //前64K地址 DPC_ADDR_BASE1 <=DPC_ADDR_BASE1+3'h1; else DPC_ADDR_BASE2 <=DPC_ADDR_BASE2+3'h1; always@(posedge CLK_33M or negedge RESET) if(!RESET) core_busy_delay <=1'b0; else core_busy_delay <=core_busy; always@(posedge CLK_33M or negedge RESET) if(!RESET) FRAME_SYN_delay <=1'b0; else FRAME_SYN_delay <=FRAME_SYN;/*always @(posedge CLK_50M or negedge RESET) if(!RESET) clksum1 <= 16'h0; else if(clksum1==16'h1) //2DIVIDE FREQUENCE; clksum1 <= 16'h0; else clksum1 <= clksum1 + 1'h1;*/ /*always@(posedge CLK_24M or negedge RESET) if(!RESET) clksum2 <= 16'h0; else if(clksum2 ==16'h3) clksum2 <=16'h0; else clksum2 <=clksum2 +16'h1; */always@(posedge CLK_33M or negedge RESET) //5M =40/8; if(!RESET) clksum2 <= 16'h0; else
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -