📄 dsp_emif_if.v
字号:
module DSP_EMIF_if ( i_rst_n, i_clk_32fc, i_dsp_clk,i_dsp_addr,i_dsp_din,o_dsp_dout,i_dsp_aoe_n,i_dsp_awe_n,i_dsp_ace_n, o_mem1_cs,o_mem2_cs,o_we,o_rd,i_mem1_din,i_mem2_din, o_SPI_choice,o_control );input i_rst_n;input i_clk_32fc;input i_dsp_clk;input[15:0] i_dsp_addr;input[15:0] i_dsp_din;output[15:0] o_dsp_dout;input i_dsp_aoe_n;input i_dsp_awe_n;input i_dsp_ace_n;output o_mem1_cs;output o_mem2_cs;input[15:0] i_mem1_din;input[15:0] i_mem2_din;output o_we;output o_rd;output[1:0] o_SPI_choice;output[15:0] o_control;//////////////////////////////////////////////wire i_rst_n;wire i_clk_32fc;wire i_dsp_clk;wire[15:0] i_dsp_addr;wire[15:0] i_dsp_din;wire[15:0] o_dsp_dout;wire i_dsp_aoe_n;wire i_dsp_awe_n;wire i_dsp_ace_n;wire o_mem1_cs;wire o_mem2_cs;wire[15:0] i_mem1_din;wire[15:0] i_mem2_din;wire o_we;wire o_rd;reg[1:0] o_SPI_choice;reg[15:0] o_control;//--------------------------------------------------wire reg_cs;reg[1:0] spi_choice;reg[15:0] control;reg[15:0] reg_data;//address mapingassign o_mem1_cs =(i_dsp_ace_n==1'b0 && i_dsp_addr[15:10] == 6'b000000)? 1'b1 : 1'b0;assign o_mem2_cs =(i_dsp_ace_n==1'b0 && (i_dsp_addr[15:10] ==6'b000001))? 1'b1 : 1'b0;assign reg_cs =(i_dsp_ace_n==1'b0 && i_dsp_addr[15:10] == 6'b000011)? 1'b1 : 1'b0;assign o_we = ~i_dsp_awe_n;assign o_rd = ~i_dsp_aoe_n;//dsp output choiceassign o_dsp_dout[15:0] = (o_rd==1'b1 && o_mem1_cs==1'b1)? i_mem1_din[15:0] : 16'hzzzz;assign o_dsp_dout[15:0] = (o_rd==1'b1 && o_mem2_cs==1'b1)? i_mem2_din[15:0] : 16'hzzzz;assign o_dsp_dout[15:0] = (o_rd==1'b1 && reg_cs==1'b1)? reg_data[15:0] : 16'hzzzz;//reg w/r operatealways@(negedge i_rst_n or posedge i_dsp_clk)begin if (i_rst_n==1'b0) begin spi_choice[1:0]<=2'b00; control[15:0]<=16'h0000; end else begin if (reg_cs==1'b1 || o_we==1'b1) begin if(i_dsp_addr[9:0]==10'h000) begin spi_choice[1:0]<=i_dsp_din[1:0]; end if(i_dsp_addr[9:0]==10'h001) begin control[15:0]<=i_dsp_din[15:0]; end end endendalways@(negedge i_rst_n or posedge i_clk_32fc)begin if (i_rst_n==1'b0) begin o_SPI_choice[1:0]<=2'b00; o_control[15:0]<=16'h0000; end else begin if(reg_cs==1'b0) begin o_SPI_choice[1:0]<=spi_choice[1:0]; o_control[15:0]<=control[15:0]; end endendalways@(negedge i_rst_n or posedge i_dsp_clk)begin if (i_rst_n==1'b0) begin reg_data[15:0]<=16'h0000; end else begin if (reg_cs==1'b1 || o_rd==1'b1) begin case(i_dsp_addr[9:0]) 10'h000: reg_data[15:0]<={14'h0000,spi_choice[1:0]}; 10'h001: reg_data[15:0]<=control[15:0]; default: reg_data[15:0]<=16'h0000; endcase end endendendmodule
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -