已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
module ahb_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);output HBUSREQ,HLOCK,HWRITE;output 1:0HTRANS,HSEL;output 31:0HADDR,HWDATA;output 2:0HSIZE,HBURST;input HGRANT,HREADY,HCLK,HRESETn,BUSREQ,ADDREQ,WRITE;input 31:0ADDE,WDATA;input 2:0SIZE,BURST;input 1:0HRESP,SEL,TRANS;input 31:0HRDATA;reg HBUSRREQ,HLOCK,HWRITE,hcount;reg 1:0HTRANS,HSEL;reg 31:0HADDR,HWDATA;reg 2:0HSIZE,HBURST;wire HGRANT,HREADY,HCLK,HRESETn,WRITE;wire 31:0ADDR,WDATA;wire 2:0SIZE,BURST;wire 1:0HRESP,SEL,TRANS;wire 31:0HRDATA;reg bus_reg,adde_reg,new_hready,old_hready;reg 31:0RDATA;reg 31:0h_addr;parameter OKAY=2b00 ERROR=2b01 RETRY=2b10 SPLIT=2b11;always (posedge HCLK)begin if(!HRESETn) begin HBUSREQ=0; HLOCK=0; HWRITE=0; HTRANS=2b00; HSEL=2b00; HADDR=32h000000000; HWDATA=32h000000000; HSIZE=2b00; HBURST=2b00; bus_reg=0; addr_reg=0; new_hready=0; old_hready=0; hcount=0; endend always (posedge HCLK)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=1b1; HWDATA=32h000000000; end end else if(addr_reg) begin HADDR=32h000000000; HWRITE=1b0; HSIZE=3b000; HBURST=3b000; HTRANS=2b00; addr_reg=1b0; end if(!ADDREQ) begin if(WRITE) begin hcount=0; case(TRANS) 2b00:begin HWDATA=WDATA; if(HREADY & !new_hready & HRESP=ERROR) new_hready=1; else if(new_hready!=old_hready) HWDATA=32h00000000; end 2b01:begin hcount=hcount+1; new_hready=0; HWDATA=WDATA; if(HREADY &!new_hready & HRESP) new_hready=1; else if(new_hready!=old hready) hWDATA=32h00000000; end 2b10:begin HWDATA=32h00000000; end 2b11:begin 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=32h00000000; end end endcaseend else if(!WRITE) begin case(TRANS) 2b00:begin if(!HREADY) RDATA=HRDATA; else if(HREADY) RDATA=32h00000000; end 2b01:begin if(!HREADY) begin RDATA=HRDATA; if(HBURST=000) h_addr=h_addr+1; else h_addr=h_addr-1; end else if(HREADY) RDATA=32h00000000; end 2b10:begin RDATA=32h00000000; end 2b11:begin if(!HREADY) begin RDATA=HRDATA; if(HBURST=000) h_addr=h_addr+1; else h_addr=h_addr-1; end endcase endendendendmodulemodule ram_top( HCLK , HRESETn , HSEL_s , HADDR_s , HBURST_s , HTRANS_s , HRDATA_s , HWDATA_s , HWRITE_s , HREADY_s , HRESP_s );input HCLK ;input HRESETn ;input HSEL_s ;input 19:0 HADDR_s ;input 2:0 HBURST_s ;input 1:0 HTRANS_s ;input 31:0 HWDATA_s ;input HWRITE_s ;output 1:0 HRESP_s ;output 31:0 HRDATA_s ;output HREADY_s ;wire 31:0 ram_RDATA ;wire 17:0 ram_ADDR ;wire 31:0 ram_WDATA ;wire ram_WRITE ;ram_ahbif U_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_infer U_ram_infer(.q (ram_RDATA ),.a (ram_ADDR ),.d (ram_WDATA ),.we (ram_WRITE ),.clk (HCLK );endmodulemodule ram_infer(q ,a ,d ,we ,clk);output 31:0 q ;input 31:0 d ;input 17:0 a ;input we ;input clk ;reg 31:0 mem 262143:0 ;always (posedge clk) beginif (we) beginmema = d;endendassign q = mema;endmodulemodule ram_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);/declaration of input & output/input HCLK ;input HRESETn ;input HSEL_s ;input 19:0 HADDR_s ;input 2:0 HBURST_s ;input 1:0 HTRANS_s ;input 31:0 HWDATA_s ;input HWRITE_s ;output 1:0 HRESP_s ;output 31:0 HRDATA_s ;output HREADY_s ;input 31:0 ram_RDATA ;output 17:0 ram_ADDR ;output 31:0 ram_WDATA ;output ram_WRITE ;/declaration of registers & wires/wire 1:0 HRESP_s ;wire 31:0 HRDATA_s ;reg HREADY_s ;wire 31:0 ram_WDATA ;reg 17:0 ram_ADDR ;reg ram_WRITE ;wire wr_en ;wire rd_en ;wire ready_en ;/program & function/assign HRESP_s = 2b00;always(posedge HCLK or negedge HRESETn)begin /HSIZE = 3b010-32bitsif(!HRESETn) beginram_ADDR = 18b000000000000000000;end else if (HSEL_s = 1b1) beginram_ADDR = HADDR_s19:2;endendassign wr_en = HSEL_s & HTRANS_s1 & HWRITE_s;always(posedge HCLK or negedge HRESETn)beginif(!HRESETn) beginram_WRITE = 1b0;end else if(wr_en) beginram_WRITE = 1b1;end else beginram_WRITE = 1b0;endendassign ram_WDATA= H
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 行政职业能力题库及答案
- 评标专家考核试题库及参考答案
- 资源管理抽考题库带答案
- 辽宁生态工程职业学院单招职业技能测试题库带答案
- 选煤厂安全规程考试题库及参考答案
- 邵阳市中国银行2026年秋招笔试综合模拟题库及参考答案
- 金华市东阳市2026年注册土木工程师考试题库及答案
- 铁道职业技术学院单招职业技能测试题库及参考答案
- 银行会计模拟试题库及参考答案
- 银行招聘笔试题库及答案
- 后浇带止水钢板及膨胀止水条方案
- 2026年广东省普通高中第一次学业水平合格性考试地理试卷
- 2026年中国魔芋种植行业规模现状及十三五投资规划研究报告
- 2026年江苏省高考生物试卷真题(含答案)
- 2026年技能人才评价督导员考试卷及答案
- 烈士褒扬条例修订解读
- 光伏储能电站运行维护手册
- 数字电子技术讲解杨志忠版
- 2026-2027学年四年级上册数学单元全真模拟培优卷(人教版)第4单元 加法模型和乘法模型
- 国网2026变配电运行值班员-中级工考试题库
- 2026年贵州省中考物理真题
评论
0/150
提交评论