CODE:
module
ahb_master(HBUSREQ,HLOCK,HTRANS,HADDR,HWRITE,HSIZE,HBURST,HWDATA,HSEL,HRESETn,HCLK,HGRANT,HREADY,HRESP,HRDATA,BUSREQ,ADDREQ,WRITE,ADDR,SIZE,BURST,SEL,TRANS,WDATA);
output HBUSREQ,HLOCK,HWRITE;
output [1:0]HTRANS,HSEL;
output [31:0]HADDR,HWDATA;
output [2:0]HSIZE,HBURST;
input
HGRANT,HREADY,HCLK,HRESETn,BUSREQ,ADDREQ,WRITE;
input [31:0]ADDR,WDATA;
input [2:0]SIZE,BURST;
input [1:0]HRESP,SEL,TRANS;
input [31:0]HRDATA;
reg HBUSREQ,HLOCK,HWRITE,hcount;
reg [1:0]HTRANS,HSEL;
reg [31:0]HADDR,HWDATA;
reg [2:0]HSIZE,HBURST;
wire HGRANT,HREADY,HCLK,HRESETn,WRITE;
wire [31:0]ADDR,WDATA;
wire [2:0]SIZE,BURST;
wire [1:0]HRESP,SEL,TRANS;
wire [31:0]HRDATA;
reg
bus_reg,addr_reg,new_hready,old_hready;
reg [31:0] RDATA;
reg [31:0] h_addr;
parameter OKAY = 2'b00,
ERROR = 2'b01,
RETRY =2'b10,
SPLIT =2'b11;
always @(posedge HCLK)
begin
if(!HRESETn) //Master
reset
begin
HBUSREQ = 0;
HLOCK = 0;
HWRITE = 0;
HTRANS = 2'b00;
HSEL = 2'b00;
HADDR = 32'h00000000;
HWDATA = 32'h00000000;
HSIZE = 2'b00;
HBURST = 2'b00;
bus_reg = 0;
addr_reg = 0;
new_hready = 0;
old_hready = 0;
hcount = 0;
end
end
always @(posedge HCLK) //Master sending the request signal to
the arbiter
begin
if(!bus_reg)
begin
if(BUSREQ)
begin
HBUSREQ = 1'b1;
bus_reg = 1;
end
else if(!BUSREQ)
HLOCK = 1'b0;
end
else if(bus_reg)
begin
HBUSREQ = 1'b0;
bus_reg = 0;
if(HGRANT)
HLOCK = 1'b1;
end
end
always@(posedge HCLK)
begin
if(HRESETn)
begin
if(HGRANT)
begin
if(!addr_reg)
begin
if(ADDREQ) //Master sending
the address and the control signals once the bus is granted
begin
HADDR = ADDR;
h_addr = ADDR;
HWRITE = WRITE;
HSIZE = SIZE;
HBURST = BURST;
HSEL = SEL;
HTRANS = TRANS;
addr_reg = 1'b1;
HWDATA = 32'h00000000;
end
end
else if(addr_reg)
begin
HADDR = 32'h00000000;
HWRITE = 1'b0;
HSIZE = 3'b000;
HBURST = 3'b000;
HTRANS = 2'b00;
addr_reg = 1'b0;
end
if(!ADDREQ) // DATA
TRANSFER
begin
if(WRITE)
begin
hcount = 0;
case ({TRANS})
2'b00 : begin //NON SEQUENTIAL
HWDATA = WDATA ;
if(HREADY &&
!new_hready && HRESP == OKAY)
new_hready = 1;
else if (new_hready !=
old_hready)
HWDATA = 32'h00000000;
end
2'b01 : begin // SEQUENTIAL
hcount = hcount + 1;
new_hready = 0;
HWDATA = WDATA ;
if(HREADY &&
!new_hready && HRESP == ERROR)
new_hready = 1;
else if (new_hready !=
old_hready)
HWDATA = 32'h00000000;
end
2'b10 : begin // IDLE
HWDATA = 32'h00000000;
end
2'b11 : begin // BUSY
hcount = hcount + 1;
HWDATA = WDATA ;
if(HREADY && HRESP
== OKAY)
begin
if(!new_hready)
new_hready =
1;
end
else if (new_hready !=
old_hready)
begin
HWDATA = WDATA;
new_hready = 0;
end
else if (HREADY &&
HRESP == ERROR)
begin
HWDATA = 32'h00000000;
end
end
endcase
end
else if(!WRITE)
begin
case ({TRANS})
2'b00 : begin //NON SEQUENTIAL
if(!HREADY)
RDATA = HRDATA;
else if(HREADY)
RDATA =
32'h00000000;
end
2'b01 : begin // SEQUENTIAL
if(!HREADY)
begin
RDATA = HRDATA;
if(HBURST == 000)
h_addr = h_addr + 1;
else
h_addr = h_addr -
1;
end
else if(HREADY)
RDATA =
32'h00000000;
end
2'b10 : begin // IDLE
RDATA = 32'h00000000;
end
2'b11 : begin // BUSY
if(!HREADY)
begin
RDATA = HRDATA;
if(HBURST ==
000)
h_addr = h_addr + 1;
else
h_addr = h_addr -
1;
end
else if(HREADY)
RDATA = HRDATA;
end
endcase
end
end
end
end
end
endmodule
TESTBENCH:
module ahb_tb;
//
Inputs
reg
HRESETn;
reg
HCLK;
reg
HGRANT;
reg
HREADY;
reg
[1:0] HRESP;
reg
[31:0] HRDATA;
reg
BUSREQ;
reg
ADDREQ;
reg
WRITE;
reg
[31:0] ADDR;
reg
[2:0] SIZE;
reg
[2:0] BURST;
reg
[1:0] SEL;
reg
[1:0] TRANS;
reg
[31:0] WDATA;
//
Outputs
wire
HBUSREQ;
wire
HLOCK;
wire
[1:0] HTRANS;
wire
[31:0] HADDR;
wire
HWRITE;
wire
[2:0] HSIZE;
wire
[2:0] HBURST;
wire
[31:0] HWDATA;
wire
[1:0] HSEL;
//
Instantiate the Unit Under Test (UUT)
ahb_master
uut (
.HBUSREQ(HBUSREQ),
.HLOCK(HLOCK),
.HTRANS(HTRANS),
.HADDR(HADDR),
.HWRITE(HWRITE),
.HSIZE(HSIZE),
.HBURST(HBURST),
.HWDATA(HWDATA),
.HSEL(HSEL),
.HRESETn(HRESETn),
.HCLK(HCLK),
.HGRANT(HGRANT),
.HREADY(HREADY),
.HRESP(HRESP),
.HRDATA(HRDATA),
.BUSREQ(BUSREQ),
.ADDREQ(ADDREQ),
.WRITE(WRITE),
.ADDR(ADDR),
.SIZE(SIZE),
.BURST(BURST),
.SEL(SEL),
.TRANS(TRANS),
.WDATA(WDATA)
);
initial
begin
//
Initialize Inputs
HRESETn
= 0;
HCLK
= 0;
HGRANT
= 0;
HREADY
= 0;
HRESP
= 0;
HRDATA
= 0;
BUSREQ
= 0;
ADDREQ
= 0;
WRITE
= 0;
ADDR
= 0;
SIZE
= 0;
BURST
= 0;
SEL
= 0;
TRANS
= 0;
WDATA
= 0;
//
Wait 100 ns for global reset to finish
#100;
HRESETn
= 1;
HGRANT = $rand;
HREADY
= $rand;
HRESP
= 0;
HRDATA
= 0;
BUSREQ
= 0;
ADDREQ
= 0;
WRITE
= 0;
ADDR
= 0;
SIZE
= 0;
BURST
= 0;
SEL
= 0;
TRANS
= 0;
WDATA
= 0;
#200;
end
always begin
#5
HCLK = ~HCLK;
end
endmodule
Its showing synthesis error. Multiple driver problem is there.
ReplyDeletehi, I am working on the same project and I am also getting the same error. Did you able to solve the issue. If yes then please help me in resolving the issue.
DeleteThanks...
do not synthesize the test bench. Its seems like its just for verification.
DeleteThis comment has been removed by a blog administrator.
ReplyDeleteRTL is not correct
ReplyDeleteCan any one please share the complete AHB code of master ,slave,arbiter ,decoder ,multiplexer ( in verilog) .my email id is -- rebeccamarcus20@gmail.com
ReplyDeleteCAN U PLEASE SEND ME ALL AHB CODE
DeleteDid you got the complete code??If yes..can you send me the complete code please
Deletemailid: stanleyanthrayose54@gmail.com
Can u plz send all the codes if you have to my email:- yrc353@gmail.com
DeleteAny body explain me What is Beats?
ReplyDeleteBEATS means number of transactions we need to do.. example: wrap4 means 4 transactions we need to do...
ReplyDeleteCan any one please share the complete AHB code of master,slave,arbiter, decoder(in verilog). My email id is ravalidudem@gmail.com
ReplyDeletehello i want AHB to i2c protocol codes can u help me.....??
ReplyDeleteany one please share the complete AHB code of master,slave,arbiter, decoder(in verilog). My email id venkatarami9666@gmail.com
ReplyDeleteplease send me complete verilog code for ahb lite protocol
ReplyDeletePlzz send me veriolg code of amba ahb protocol
ReplyDeletePlz send me veriolg code of ahb protocol at mail akedia955@gmail.com
DeleteCan anyone provide me the complete code of AMBA ahb protocol
ReplyDeletecan anyone please send me the correct rtl code of ahb,urgently needed-mail it to shradhanjalisarangi@gmail.com
ReplyDeleteCan someone send me the ahb master verilog code ASAP
ReplyDelete2017.varun.anand@ves.ac.in
can anyone share me the complete ahb verilog code.
ReplyDeletemy ID is yashu060@gmail.com
Can you send me ahb lite master and slave code please
ReplyDeleteId - akhilbr98@gmail.com
can you send me AHB5, AHB-Lite master and slave code please
ReplyDeleteMY ID :- kishorre77990@gmail.com
MY ID kishore77990@gmail.com
ReplyDelete