VerilogHDL代码AHB总线master部分.docx

上传人:b****8 文档编号:11288086 上传时间:2023-02-26 格式:DOCX 页数:13 大小:265.74KB
下载 相关 举报
VerilogHDL代码AHB总线master部分.docx_第1页
第1页 / 共13页
VerilogHDL代码AHB总线master部分.docx_第2页
第2页 / 共13页
VerilogHDL代码AHB总线master部分.docx_第3页
第3页 / 共13页
VerilogHDL代码AHB总线master部分.docx_第4页
第4页 / 共13页
VerilogHDL代码AHB总线master部分.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

VerilogHDL代码AHB总线master部分.docx

《VerilogHDL代码AHB总线master部分.docx》由会员分享,可在线阅读,更多相关《VerilogHDL代码AHB总线master部分.docx(13页珍藏版)》请在冰豆网上搜索。

VerilogHDL代码AHB总线master部分.docx

VerilogHDL代码AHB总线master部分

 

VerilogHDL代码_AHB总线_master部分

moduleahb_master(HBUSREQ,HLOCK,HTRANS,HADDR,HWRITE,HSIZE,HBURST,HWDATA,HSEL,hcount,HRESETn,HCLK,HGRANT,HREADY,HRESP,HRDATA,BUSREQ,ADDREQ,WRITE,ADDR,SIZE,BURST,SEL,TRANS,WDATA);

outputHBUSREQ,HLOCK,HWRITE;

output[1:

0]HTRANS,HSEL;

output[31:

0]HADDR,HWDATA;

output[2:

0]HSIZE,HBURST;

inputHGRANT,HREADY,HCLK,HRESETn,BUSREQ,ADDREQ,WRITE;

input[31:

0]ADDE,WDATA;

input[2:

0]SIZE,BURST;

input[1:

0]HRESP,SEL,TRANS;

input[31:

0]HRDATA;

regHBUSRREQ,HLOCK,HWRITE,hcount;

reg[1:

0]HTRANS,HSEL;

reg[31:

0]HADDR,HWDATA;

reg[2:

0]HSIZE,HBURST;

wireHGRANT,HREADY,HCLK,HRESETn,WRITE;

wire[31:

0]ADDR,WDATA;

wire[2:

0]SIZE,BURST;

wire[1:

0]HRESP,SEL,TRANS;

wire[31:

0]HRDATA;

regbus_reg,adde_reg,new_hready,old_hready;

reg[31:

0]RDATA;

reg[31:

0]h_addr;

parameterOKAY=2'b00

ERROR=2'b01

RETRY=2'b10

SPLIT=2'b11;

always@(posedgeHCLK)

begin

if(!

HRESETn)

begin

HBUSREQ=0;

HLOCK=0;

HWRITE=0;

HTRANS=2'b00;

HSEL=2'b00;

HADDR=32'h000000000;

HWDATA=32'h000000000;

HSIZE=2'b00;

HBURST=2'b00;

bus_reg=0;

addr_reg=0;

new_hready=0;

old_hready=0;

hcount=0;

end

end

always@(posedgeHCLK)

begin

if(HRESETn)

begin

if(!

addr_reg)

begin

if(ADDREQ)

begin

HADDR=ADDR;

h_addr=ADDR;

HWRITE=WRITE;

HSIZE=SIZE;

HBURST=BURST;

HSEL=SEL;

HTRANS=TRANS;

addr_reg=1'b1;

HWDATA=32'h000000000;

end

end

elseif(addr_reg)

begin

HADDR=32'h000000000;

HWRITE=1'b0;

HSIZE=3'b000;

HBURST=3'b000;

HTRANS=2'b00;

addr_reg=1'b0;

end

if(!

ADDREQ)

begin

if(WRITE)

begin

hcount=0;

case({TRANS})

2'b00:

begin

HWDATA=WDATA;

if(HREADY&&!

new_hready&&HRESP==ERROR)

new_hready=1;

elseif(new_hready!

=old_hready)

HWDATA=32'h00000000;

end

2'b01:

begin

hcount=hcount+1;

new_hready=0;

HWDATA=WDATA;

if(HREADY&&!

new_hready&&HRESP)

new_hready=1;

elseif(new_hready!

=oldhready)

hWDATA=32'h00000000;

end

2'b10:

begin

HWDATA=32'h00000000;

end

2'b11:

begin

hcount=hcount+1;

HWDATA=WDATA;

if(HREADY&&HRESP==OKAY)

begin

if(!

new_hready)

new_hready=1;

end

elseif(new_hready!

=old_hready)

begin

HWDATA=WDATA;

new_hready=0;

end

elseif(HREADY&&HRESP==ERROR)

begin

HWDATA=32'h00000000;

end

end

endcase

end

elseif(!

WRITE)

begin

case({TRANS})

2'b00:

begin

if(!

HREADY)

RDATA=HRDATA;

elseif(HREADY)

RDATA=32'h00000000;

end

2'b01:

begin

if(!

HREADY)

begin

RDATA=HRDATA;

if(HBURST==000)

h_addr=h_addr+1;

else

h_addr=h_addr-1;

end

elseif(HREADY)

RDATA=32'h00000000;

end

2'b10:

begin

RDATA=32'h00000000;

end

2'b11:

begin

if(!

HREADY)

begin

RDATA=HRDATA;

if(HBURST==000)

h_addr=h_addr+1;

else

h_addr=h_addr-1;

end

endcase

end

end

end

endmodule

moduleram_top(

HCLK,

HRESETn,

HSEL_s,

HADDR_s,

HBURST_s,

HTRANS_s,

HRDATA_s,

HWDATA_s,

HWRITE_s,

HREADY_s,

HRESP_s

);

inputHCLK;

inputHRESETn;

inputHSEL_s;

input[19:

0]HADDR_s;

input[2:

0]HBURST_s;

input[1:

0]HTRANS_s;

input[31:

0]HWDATA_s;

inputHWRITE_s;

output[1:

0]HRESP_s;

output[31:

0]HRDATA_s;

outputHREADY_s;

wire[31:

0]ram_RDATA;

wire[17:

0]ram_ADDR;

wire[31:

0]ram_WDATA;

wireram_WRITE;

ram_ahbifU_ram_ahbif(

.HCLK(HCLK),

.HRESETn(HRESETn),

.HSEL_s(HSEL_s),

.HADDR_s(HADDR_s),

.HBURST_s(HBURST_s),

.HTRANS_s(HTRANS_s),

.HRDATA_s(HRDATA_s),

.HWDATA_s(HWDATA_s),

.HWRITE_s(HWRITE_s),

.HREADY_s(HREADY_s),

.HRESP_s(HRESP_s),

.ram_RDATA(ram_RDATA),

.ram_ADDR(ram_ADDR),

.ram_WDATA(ram_WDATA),

.ram_WRITE(ram_WRITE)

);

ram_inferU_ram_infer(

.q(ram_RDATA),

.a(ram_ADDR),

.d(ram_WDATA),

.we(ram_WRITE),

.clk(HCLK)

);

endmodule

moduleram_infer(

q,

a,

d,

we,

clk

);

output[31:

0]q;

input[31:

0]d;

input[17:

0]a;

inputwe;

inputclk;

reg[31:

0]mem[262143:

0];

always@(posedgeclk)

begin

if(we)

begin

mem[a]<=d;

end

end

assignq=mem[a];

endmodule

moduleram_ahbif(

HCLK,HRESETn,

HSEL_s,

HADDR_s,

HBURST_s,

HTRANS_s,

HRDATA_s,

HWDATA_s,

HWRITE_s,

HREADY_s,

HRESP_s,

ram_RDATA,

ram_ADDR,

ram_WDATA,

ram_WRITE

);

///////////////////////////////////////

//declarationofinput&output

///////////////////////////////////////

inputHCLK;

inputHRESETn;

inputHSEL_s;

input[19:

0]HADDR_s;

input[2:

0]HBURST_s;

input[1:

0]HTRANS_s;

input[31:

0]HWDATA_s;

inputHWRITE_s;

output[1:

0]HRESP_s;

output[31:

0]HRDATA_s;

outputHREADY_s;

input[31:

0]ram_RDATA;

output[17:

0]ram_ADDR;

output[31:

0]ram_WDATA;

outputram_WRITE;

///////////////////////////////////////

//declarationofregisters&wires///////////////////////////////////////

wire[1:

0]HRESP_s;

wire[31:

0]HRDATA_s;

regHREADY_s;

wire[31:

0]ram_WDATA;

reg[17:

0]ram_ADDR;

regram_WRITE;

wirewr_en;

wirerd_en;

wireready_en;

///////////////////////////////////////

//program&function

///////////////////////////////////////

assignHRESP_s=2'b00;

always@(posedgeHCLKornegedgeHRESETn)

begin//HSIZE=3'b010--32bits

if(!

HRESETn)begin

ram_ADDR<=18'b000000000000000000;

end

elseif(HSEL_s==1'b1)

begin

ram_ADDR<=HADDR_s[19:

2];

end

end

assignwr_en=HSEL_s&HTRANS_s[1]&HWRITE_s;

always@(posedgeHCLKornegedgeHRESETn)

begin

if(!

HRESETn)

begin

ram_WRITE<=1'b0;

end

elseif(wr_en)

begin

ram_WRITE<=1'b1;

end

else

begin

ram_WRITE<=1'b0;

end

end

assignram_WDATA=HWDATA_s;

assignHRDATA_s=ram_RDATA;

assignready_en=HSEL_s&HTRANS_s[1];

always@(posedgeHCLKornegedgeHRESETn)

begin

if(!

HRESETn)

begin

HREADY_s<=1'b0;

end

elseif(ready_en)

begin

HREADY_s<=1'b1;

end

else

begin

HREADY_s<=1'b0;

end

end

endmodule

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 其它课程

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1