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

上学期刚学完单片机原理,所以上手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文档里面相同,这样方便直接导入。



  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值