您的位置:首页 > 其它

ALTERA DE2 之 verilog HDL 学习笔记04 -altera DE2 上 SRAM的读写

2015-09-02 20:27 633 查看
上学期刚学完单片机原理,所以上手DE2板子比较容易,RAM 和 ROM概念之前早已经建立。趁着打完使命召唤后有些疲倦,就写一个关于DE2板子上的SRAM的学习笔记缓解一下。+_+

首先,DE2上SRAM的大小是512KB,型号为ISSI- IS61LV25616AL-10TL ,TSOP封装,原理图如下:



引脚说明:



这里说明下地址总线A0-A17,一共18位,2^18=256K != 512KB ,这个可能是RAM芯片内部有一个译码器吧唧。

数据总线I/O 0~I/O 15 ,16位输出。

真值表:



下面直接上代码:

功能介绍:

1、RAM地址发生,我们用一个KEY0作为一个计数器,当人为按下时,4位计数器count++,高位的14位直接补0;

2、用按键KEY1作为WE,当按下时,写入当前按键状态(数据);

3、开发板上SW0 ~ SW15 作为数据输入;

4、HEX3~HEX0显示目的地址的数据,HEX4显示地址;

5、UB和LB都同时打开,方便读取所有数据;

//Top Module

module SRAM(
input [1:0] KEY,                    //pushbutton [1:0]
input [15:0] SW,                     //toggle switch[15:0]
output [6:0] HEX0,         //7-seg display
output [6:0] HEX1,         //7-seg display
output [6:0] HEX2,         //7-seg display
output [6:0] HEX3,         //7-seg display
output [6:0] HEX4,         //7-seg display
output [6:0] HEX5,         //7-seg display
output [6:0] HEX6,         //7-seg display
output [3:0] LEDG,        //led green[3:0]
output [15:0] LEDR,       //led red[15:0]
inout [15:0] SRAM_DQ,            //SRAM data bus 16 bits
output [17:0] SRAM_ADDR,    //SRAM address bus 18 bits
output SRAM_UB_N,                    //SRAM high-byte data mask
output SRAM_LB_N,         //SRAM low-byte data mask
output SRAM_WE_N,         //SRAM write enable
output SRAM_CE_N,         //SRAM chip enable
output SRAM_OE_N         //SRAM output enable
);

reg [3:0] shortCount;

assign HEX5=7'b011_1111;    //-用不上的数码管先关闭
assign HEX6=7'b011_1111;  //-
assign HEX6=7'b011_1111;  //-

//memeory address
//connect KEY0 switch to led to upcount and display
always @(negedge KEY[0])
begin
shortCount<=shortCount+1;
end
assign LEDG[3:0]=shortCount;
//display the hex value of the short counter
//this is also the memory address
HexDigit Digit4(HEX4,shortCount);

//SRAM Interface
assign SRAM_ADDR={14'h0,shortCount};    //SRAM Address bus 18 bits
assign SRAM_UB_N=0;                                        //hi byte select enabled
assign SRAM_LB_N=0;                                        //lo byte select enabled
assign SRAM_CE_N=0;                                        //chip is enabled
assign SRAM_WE_N=KEY[1];                            //write when KEY1 is pressed
assign SRAM_OE_N=0;                                        //output enable is overidden by WE
//if KEY1 is not pressed, then float bus, so that SRAM can drive it (read)
//if KEY1 is pressed, drive it with data from SW[15:0] to be stored in SRAM (write)
assign SRAM_DQ=(KEY[1]?16'hzzzz:SW[15:0]);
//show memory on the LEDs and 7-seg display
assign LEDR[15:0]=SRAM_DQ;
HexDigit Digit0(HEX0,SRAM_DQ[3:0]);
HexDigit Digit1(HEX1,SRAM_DQ[7:4]);
HexDigit Digit2(HEX2,SRAM_DQ[11:8]);
HexDigit Digit3(HEX3,SRAM_DQ[15:12]);

endmodule


//Decode one hex digit for LED 7-seg display

module HexDigit(segs,num
//input [3:0] num,
//output reg [6:0] segs
);
input [3:0] num;
output [6:0] segs;
reg [6:0] segs;

always @(num)
begin
case(num)
4'h0: segs = 7'b1000000;
4'h1: segs = 7'b1111001;
4'h2: segs = 7'b0100100;
4'h3: segs = 7'b0110000;
4'h4: segs = 7'b0011001;
4'h5: segs = 7'b0010010;
4'h6: segs = 7'b0000010;
4'h7: segs = 7'b1111000;
4'h8: segs = 7'b0000000;
4'h9: segs = 7'b0010000;
4'ha: segs = 7'b0001000;
4'hb: segs = 7'b0000011;
4'hc: segs = 7'b1000110;
4'hd: segs = 7'b0100001;
4'he: segs = 7'b0000110;
4'hf: segs = 7'b0001110;
default segs = 7'b1111111;
endcase
end

endmodule


由于管脚较多,采取导入txt引脚文件。在取变量名时,可以和官方的CSV文档里面相同,这样方便直接导入。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: