📄 picoblaze_vga_busif.v
字号:
module picoblaze_vga_busif( iCLK, iRST_N, iADDR, iDATAIN, iWR, iRD, oHC_DBUS, oVGA_RED, oVGA_GREEN, oVGA_BLUE, iVALID);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 output[ 7: 0] oHC_DBUS ; // Data Bus output 8 bitsinput iVALID ;output[ 2: 0] oVGA_RED; output[ 2: 0] oVGA_GREEN;output[ 2: 0] oVGA_BLUE; reg [ 2: 0] sr_red; // offset 0x0 reg [ 2: 0] sr_green; // offset 0x1reg [ 2: 0] sr_blue; // offset 0x2reg [ 7: 0] sr_HC_DBUS ;reg sr_wr;reg sr_rd;wire s_ADDRMATCH_RED;wire s_ADDRMATCH_GREEN;wire s_ADDRMATCH_BLUE;wire s_RD;wire s_WR;assign oVGA_RED = ( iVALID ) ? sr_red : 3'h0;assign oVGA_GREEN = ( iVALID ) ? sr_green : 3'h0;assign oVGA_BLUE = ( iVALID ) ? sr_blue : 3'h0; assign oHC_DBUS = sr_HC_DBUS;// & { 8{s_RD}};assign s_ADDRMATCH_RED = (iADDR == C_BASEADDR )? 1'b1:1'b0;assign s_ADDRMATCH_GREEN = (iADDR == C_BASEADDR + 8'h1)? 1'b1:1'b0;assign s_ADDRMATCH_BLUE = (iADDR == C_BASEADDR + 8'h2)? 1'b1:1'b0;assign s_WR = iWR & (~sr_wr);assign s_RD = iRD & (~sr_rd);always @ ( s_ADDRMATCH_RED or s_ADDRMATCH_GREEN or s_ADDRMATCH_BLUE or oHC_DBUS or sr_red or sr_green or sr_blue or iRD )begin case ({s_ADDRMATCH_RED,s_ADDRMATCH_GREEN,s_ADDRMATCH_BLUE}) 3'b100: begin sr_HC_DBUS = {5'h0,sr_red}; end 4'b010: begin sr_HC_DBUS = {5'h0,sr_green}; end 4'b001: begin sr_HC_DBUS = {5'h0,sr_blue}; end default: 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_redalways @ ( posedge iCLK or negedge iRST_N ) begin if ( !iRST_N ) begin sr_red <= 3'h0; end else begin if ( s_ADDRMATCH_RED & s_WR ) begin sr_red <= iDATAIN[ 2: 0]; end else begin sr_red <= sr_red; end endend// register sr_greenalways @ ( posedge iCLK or negedge iRST_N ) begin if ( !iRST_N ) begin sr_green <= 3'h0; end else begin if ( s_ADDRMATCH_GREEN & s_WR ) begin sr_green <= iDATAIN[ 2: 0]; end else begin sr_green <= sr_green; end endend// register sr_bluealways @ ( posedge iCLK or negedge iRST_N ) begin if ( !iRST_N ) begin sr_blue <= 8'h0; end else begin if ( s_ADDRMATCH_BLUE & s_WR ) begin sr_blue <= iDATAIN[ 2: 0]; end else begin sr_blue <= sr_blue; end endendendmodule
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -