首页 > 其他分享 >AHB-SRAMC Design-02

AHB-SRAMC Design-02

时间:2023-04-02 15:58:46浏览次数:37  
标签:AHB SRAMC csn addr sram 02 input sel assign

AHB-SRAMC Design

SRAM集成,顶层模块尽量不要写交互逻辑


module ahb_slave_if(
	input hclk,
	input hrestn,
	
	input hwrite,
	input hsel,
	input hready,
	
	input [2:0] hsize,
	input [1:0] htrans,
	input [2:0] hburst,
	input [31:0] haddr
	input [31:0] hwdata,
	
	
	input [7:0] sram_q0;
	input [7:0] sram_q1;
	input [7:0] sram_q2;
	input [7:0] sram_q3;
	input [7:0] sram_q4;
	input [7:0] sram_q5;
	input [7:0] sram_q6;
	input [7:0] sram_q7;
	
	onput hready_resp,
	onput [1:0] hresp,
	onput [31:0] hrdata,
	
	output sram_w_en,
	output [3:0] bank0_csn,
	output [3:0] bank1_csn,
	
	output [31:0] sram_wdata,
	output [12:0] sram_addr_out
);

	// 定义一些内部信号
	wire [1:0] haddr_sel;
	
	wire [1:0] hsize_sel;
	
	wire bank_sel;  // bank选择信号,拉高选择bank0,拉低选择bank1
	
	wire sram_csn_en; // sram选择信号
	
	wire sram_read;
	wire sram_write; // sram读写信号
	
	wire [15:0] sram_addr;
	wire [31:0] sram_data_out;
	
	
	
 	parameter		IDLE = 2'b00,
				BUSY = 2'b01,
				NONSEQ = 2'b10,
				SEQ = 2'b11;

	
	assign hready_resp = 1'b1;
	assign hresp = 2'b00;
	
	// 从sram中读取的数据
	hrdata = sram_data_out;
	
	
	// 根据bank_sel进行选择bank中的mem读取,bank_sel == 1 选择bank0,bank_sel == 0选择bank1
	assign sram_data_out = bank_sel ? {sram_q7,sram_q6,sram_q5,sram_q4}:
								{sram_q3,sram_q2,sram_q1,sram_q0};
					
	assign sram_write = hwrite && ((htrans_r == NONSEQ) || (htrans_r == SEQ));
	assign sram_read = (!hwrite) && ((htrans_r == NONSEQ) || (htrans_r == SEQ));
	
	// 产生写信号,低有效
	assign sram_w_en = !sram_write;
	
	assign sram_addr = haddr[15:0];
	assign sram_addr_out = sram_addr[14:2];
	
	// 写或读的时候进行片选
	assign sram_csn_en = (sram_write || sram_read);
	assign bank_sel = (sram_csn_en && (sram_addr[15]) == 1'b0) ? 1‘b1:1’b0;
	
	
	// 产生片选信号 
	assign bank0_csn = (sram_csn_en && (sram_addr[15] == 1'b0)) ?sram_csn:4'b1111;
	assign bank1_csn = (sram_csn_en && (sram_addr[15] == 1'b1)) ?sram_csn:4'b1111;
	
	assign haddr_sel = sram_addr[1:0];
	assign hsize_sel = hszie_r[1:0];
	
	assign sram_wdata = hwdata;
	
	
	always @(hsize_sel or haddr_sel)
	begin
		if(hsize_sel == 2‘b10)
			sram_csn = 4’b0;
		else if(haddr_sel == 2'b01)
		begin
			if(!haddr_sel[1] = 1'b0)
				sram_csn = 4'b1100;
			else 
				sram_csn = 4'b0011;
		end
		else if(hsize_sel == 2'b00) 
		begin
			case(haddr_sel)
				2'b00:sram_csn = 4'b1110;
				2'b01:sram_csn = 4'b1101;
				2'b10:sram_csn = 4'b1011;
				2'b11:sram_csn = 4'b0111;
				default:sram_csn = 4'b1111;
			endcase
		end
		else
			sram_csn = 4'b1111;
	end
	
	
        // 将ahb总线控制信号进行打拍处理
	always@(posedge hclk or negedge hrestn)
	begin
		if(!hrestn) begin
			hwrite_r <= 1'b0;
			hsize_r  <= 3'b0;
			hburst_r <= 3'b0;
			htrans_r <= 2'b0;
			haddr_r  <= 32'b0;
		end 
		else if(hsel && hready) begin
			hwrite_r <= hwrite;
			hsize_r  <= hsize;
			hburst_r <= hburst;
			htrans_r <= htrans;
			haddr_r  <= haddr;
		end 
		else 
		begin
			hwrite_r <= 1'b0;
			hsize_r  <= 3'b0;
			hburst_r <= 3'b0;
			htrans_r <= 2'b0;
			haddr_r  <= 32'b0;

		end
	end
	
endmodule

  1. 将ahb总线地址和控制信号进行打拍
  2. 定义parameter(htrans状态和hsize)

标签:AHB,SRAMC,csn,addr,sram,02,input,sel,assign
From: https://www.cnblogs.com/Icer-newer/p/17280387.html

相关文章

  • NOI2023 联合省选游记
    Day-4~Day-1把【全真模拟】都给摆了,随机看一些知识点,决定到时候慢慢敲暴力。Day0颓了一天,随机睡觉和颓废。Day1放个CSPT1难度的T1,笑死。T2来推一推!30min后感觉自己会了!T3,不是模拟费用流板子吗?也不是很难写!感觉赢麻了。自信即癫疯!草,T1为啥要线段树优化建图啊,开写。......
  • BUUCTF re/[ACTF新生赛2020]Oruga
    [ACTF新生赛2020]Oruga进入sub_78A函数,查看主要逻辑打印迷宫,并确定结果data=[0,0,0,0,0x23,0,0,0,0,0,0,0,0x23,0x23,0x23,0x23,0,0,0,0x23,0x23,0,0,0,0x4F,0x4F,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x4F,0x4F,0,0x50,0x50,......
  • 2023年4月
    4月2日这两周没闲着。因为没有雨伞,所以只能冒着雨,靠自己多四处奔跑寻找落脚点“避雨”。大学四年过去了,我才后知后觉自己比较喜欢金融类相关工作,单一的编程工作我是真的提不起兴趣。所以我花费了两周时间寻找职业规划的内容,结合自己目前的学历背景和技能情况,想要跨行金融,那么只能......
  • 2023年04月IDE流行度最新排名
    点击查看最新IDE流行度最新排名(每月更新)2023年04月IDE流行度最新排名顶级IDE排名是通过分析在谷歌上搜索IDE下载页面的频率而创建的一个IDE被搜索的次数越多,这个IDE就被认为越受欢迎。原始数据来自谷歌Trends如果您相信集体智慧,TopIDE索引可以帮助您决定在软件开发项目中使用......
  • 2023年04月在线IDE流行度最新排名
    点击查看最新在线IDE流行度最新排名(每月更新)2023年04月在线IDE流行度最新排名TOP在线IDE排名是通过分析在线ide名称在谷歌上被搜索的频率而创建的在线IDE被搜索的次数越多,人们就会认为它越受欢迎。原始数据来自谷歌Trends如果您相信集体智慧,那么TOPODE索引可以帮助您决定在......
  • 2023年04月数据库流行度最新排名
    点击查看最新数据库流行度最新排名(每月更新)2023年04月数据库流行度最新排名TOPDB顶级数据库索引是通过分析在谷歌上搜索数据库名称的频率来创建的一个数据库被搜索的次数越多,这个数据库就被认为越受欢迎。这是一个领先指标。原始数据来自谷歌Trends如果您相信集体智慧,那么TOP......
  • 2023年04月编程语言流行度排名
    点击查看最新编程语言流行度排名(每月更新)2023年04月编程语言流行度排名编程语言流行度排名是通过分析在谷歌上搜索语言教程的频率而创建的一门语言教程被搜索的次数越多,大家就会认为该语言越受欢迎。这是一个领先指标。原始数据来自谷歌Trends如果您相信集体智慧,那么流行编程......
  • mingw64 + nvim + coc.nvim + nvim-dap : C++ windows - 02
    2.1命令行工具https://github.com/sharkdp/fdhttps://github.com/junegunn/fzfhttps://github.com/BurntSushi/ripgrephttps://github.com/tree-sitter/tree-sitterC:\gnu\cli\fd.exeC:\gnu\cli\fzf.exeC:\gnu\cli\rg.exeC:\gnu\cli\tree-sitter.exe添加到path......
  • jQuery遍历_02
       ......
  • AcWing 1023. 买书
    小明手里有n元钱全部用来买书,书的价格为10元,20元,50元,100元。问小明有多少种买书方案?(每种书可购买多本)输入格式一个整数n,代表总共钱数。输出格式一个整数,代表选择方案种数。数据范围0≤n≤1000输入样例1:20输出样例1:2输入样例2:15输出样例2:0输入样例3:0输出样例3:1......