📄 picoblaze_pushbutton_busif.v
字号:
module picoblaze_pushbutton_busif( iCLK, iRST_N, iADDR, iDATAIN, iWR, iRD,
iPUSHBUTTON, oHC_DBUS, oISR );parameter C_BASEADDR = 8'h00;input iCLK ; // System clockinput iRST_N ; // System RST Low Activeinput [ 7: 0] iADDR ; // Address Bus 8 bitsinput [ 7: 0] iDATAIN ; // Data Bus input 8 bitsinput iWR ; // Write operationinput iRD ; // Read operation
input [ 3: 0] iPUSHBUTTON;
output[ 7: 0] oHC_DBUS ; // Data Bus output 8 bitsoutput[ 3: 0] oISR ; reg [ 3: 0] sr_isr; // offset 0x0 reg [ 7: 0] sr_HC_DBUS ;reg sr_wr;reg sr_rd;wire s_ADDRMATCH_ISR;wire s_RD;wire s_WR; assign oHC_DBUS = sr_HC_DBUS;// & { 8{s_RD}};assign oISR = sr_isr;assign s_ADDRMATCH_ISR = (iADDR == C_BASEADDR )? 1'b1:1'b0;assign s_WR = iWR & (~sr_wr);assign s_RD = iRD & (~sr_rd);always @ ( s_ADDRMATCH_ISR or oHC_DBUS or sr_isr or iRD )begin case ({s_ADDRMATCH_ISR}) 1'b1: begin sr_HC_DBUS = {4'h0,sr_isr}; end 1'b0: begin sr_HC_DBUS = 8'h0; end endcaseend// register sr_wralways @ ( posedge iCLK or negedge iRST_N ) begin if ( !iRST_N ) begin sr_wr <= 1'b0; end else begin sr_wr <= iWR; endend// register sr_rd always @ ( posedge iCLK or negedge iRST_N ) begin if ( !iRST_N ) begin sr_rd <= 1'b0; end else begin sr_rd <= iRD; endend// register sr_isralways @ ( posedge iCLK or negedge iRST_N ) begin if ( !iRST_N ) begin sr_isr <= 4'h0; end else begin if ( s_ADDRMATCH_ISR & s_WR ) begin sr_isr <= iDATAIN[ 3: 0]; end else begin sr_isr <= sr_isr | { ~iPUSHBUTTON[3],~iPUSHBUTTON[2],~iPUSHBUTTON[1],~iPUSHBUTTON[0]} ; end endendendmodule
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -