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封装,原理图如下:
![](http://img.blog.csdn.net/20150902191123610?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
引脚说明:
![](http://img.blog.csdn.net/20150902191307271?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
这里说明下地址总线A0-A17,一共18位,2^18=256K != 512KB ,这个可能是RAM芯片内部有一个译码器吧唧。
数据总线I/O 0~I/O 15 ,16位输出。
真值表:
![](http://img.blog.csdn.net/20150902193254351?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
下面直接上代码:
功能介绍:
1、RAM地址发生,我们用一个KEY0作为一个计数器,当人为按下时,4位计数器count++,高位的14位直接补0;
2、用按键KEY1作为WE,当按下时,写入当前按键状态(数据);
3、开发板上SW0 ~ SW15 作为数据输入;
4、HEX3~HEX0显示目的地址的数据,HEX4显示地址;
5、UB和LB都同时打开,方便读取所有数据;
由于管脚较多,采取导入txt引脚文件。在取变量名时,可以和官方的CSV文档里面相同,这样方便直接导入。
首先,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文档里面相同,这样方便直接导入。
相关文章推荐
- webstorm安装express报错
- C语言正数和负数循环右移,左移,把某正数的第m位(从0开始)到n位取反
- 常见浏览器兼容问题、盒模型2种模式以及css hack知识讲解
- 《失控》读后感
- 【C++】类和对象(构造与析构)
- 基于UDP的网络编程
- 基于TCP的网络编程
- 深入理解进程间通信之信号
- 深入理解进程间通信之消息队列
- 使用GDB调试程序
- ajax缓存问题
- Python open()函数文件打开、读、写基础操作
- Python open()函数文件打开、读、写基础操作
- TCP协议
- 字节序问题
- 算法基础之排序
- 黑马程序员——Java之集合
- C库函数使用与总结之字符串处理函数
- C库函数使用与总结之时间函数
- UI中的KVC:键值编码访问属性的方式