1、 单口单口 RAM 计数器计数器 一、 设计题目 用一个 8256 的单口 RAM 完成 256 个 8 位计数器,计数器的初值分别为 0255,时 钟频率为 10MHz,计数器计数频率为 5/256MHz。 二、 设计规范 1、功能:完成一个模为 256 的计数器。 2、输入输出变量: Clk(输入时钟) 、rst_n(复位信号) 、outdata(输出信号) Clk:时钟信号,10MHZ rst_n:复位信号,低电平有效,当复位信号有效时,对存储单元进行复位,具体设计: if(!rst_n) begin for(i=0;i256;i=i+1) RAMi=i; end outdata: 输出
2、变量,对存储单元的计数情况进行检验,方便检查。 3、实现方案 首先对整个系统的功能进行研究,将整个系统进行模块划分: 模块划分说明: 1、 二分频功能块:对系统时钟进行而分频,形成 5MHZ 的时钟; 输入变量 clk(10MHZ) ,输出变量为 clk1(5MHZ) 。 2、 一个地址自加模块:当一个时钟上升沿来时,触发地址器加一,从而对ram 单元 进行选择,也就是实现了对 5MHZ 的 256 分频,所以通过以上两个模块,共同完 成了频率为 5/256MHZ 的时钟。输入信号为 clk1(5MHZ) ,输出变量为 8 位宽的 地址信号。 3、 存储单元:存储功能,存放每个计数器的值。 存
3、储容量:256*8, 输入变量:地址信号、时钟信号 clk1 输出变量:outdata(检验结果正确性,可有可无) 三、 总体实现方式 1、 最终模块 2、 模块划分 模块功能 1、 二分频:对时钟频率进行分频,得到 5MHZ 的频率信号 clk1 Outdata Rst_n Clk 5/256MHZ 计数器 Outdata Clk1 Clk 二分频 256*8 RAM 选择单元 8bit 地址 2、 8bit 地址:由每个时钟信号 clk1 进行触发,将地址信号 addr 进行加一,并将结果送 至存储单元进行单元选择。 3、 256*8 的 RAM:实现 8 个模为 256 的计数器,并有地
4、址线进行选择输出。 四、 模块源代码 1、二分频 module diff_f(clk,out);/分频器 input clk; output out; reg out; initial out=0; always (posedge clk) /分频 out = out+1; endmodule 2、地址自加 module address(clk1,addr1); input clk1; /输入时钟 output 7:0addr1;/输出地址 reg 7:0addr1; always(negedge clk1 or negedge rst_n) if(!rst_n) addr1=8b0000_0000; else /if(clk1) addr1=addr1+1; /地址加 endmodule 3、RAM 存储单元 module ram256_8(clk2,addr2,rst_n,outdata); input clk2; /输入时钟 input rst_n; /复位信号 input 7:0addr2; /地址信