FPGA中的M4K

来源:互联网 发布:数据新闻可视化 编辑:程序博客网 时间:2024/04/20 00:12

哈哈...M4K??什么是M4K???

m4k就是一个存储单元,具体点就是以4kbits,4k为一块、///、EP2C8 有36个165888bits

RAM fifo ROM等可以由M4K等块存储单元组成也可以用LUT组成,按设计需要选择相应的组成方式;

是一个网友解释道的....

//================================RAM读取=========================================//

FPGA中M4K的笔记 - 木头 - 木头

 先看一个时序图吧:

可以直达wren是高电平有效的,及高电平可以写入.....

当wren为低电平是则是读出...

当clk为高电平时,读出或写入......

//==========================SHIFT的配置(移位寄存器)=================//

FPGA中M4K的笔记 - 木头 - 木头

8bits表示位宽,64表示字节数,

create a clock enable port可以添加一个使能标志位.

sss sss_inst (
 .clock ( clk),
 .shiftin ( shiftin_sig ),
 .shiftout ( shiftout_sig ),
 .taps0x ( taps0x_sig ),
 .taps1x ( taps1x_sig ),
 .taps2x ( taps2x_sig ),
 .taps3x ( taps3x_sig )
 );

 

看一下时序图吧:

FPGA中M4K的笔记 - 木头 - 木头

 有时序图可以看出:

how wide should the distance between taps be?
设置移位寄存器的相隔的位数(这里设置为4),即是每隔多少个时钟周期才更新一下个数据

tabs0最先输出数据,taps7是最后输出数据;

其中shiftout的数据和taps7的数据是相同的.....

 //========================ROM==============================//
FILE->NEW_>>>>Menoy initalization file>
FPGA中M4K的笔记 - 木头 - 木头
 

 过了就是填写rom的位数和字节数

FPGA中M4K的笔记 - 木头 - 木头
记得number of words必须是32的整数倍,不然后面的存储块分配的时候会出现错误.....
然后就填充数据,确定就可以生产.mof格式的文件.........
时序图:
FPGA中M4K的笔记 - 木头 - 木头
 一般式:
先定义一个define.v文件(这个文件名可以随便取),
在这个文件中定义:
`define  CHAR_0 (9'd8 * 9'd0)
`define  CHAR_1 (9'd8 * 9'd1)
`define  CHAR_2 (9'd8 * 9'd2)
等需要的宏定义把它们放在para_define.v的文件中去
使用时用:`include "para_define.v" 调用它们。。。
个人觉得这方法不错....嘻嘻.......
然后直接调用CHAR_0,CHAR_1等宏定义/////
上一个简单的代码吧
//其中每个字节分配一个地址
module rom(
  clk,rst_n,
  q
  );
input clk,rst_n;
output[7:0] q;  
wire[4:0] addr;//访问地址

rom1 rom1_inst (
 .address ( addr ), //写入地址
 .clock ( clk ),
 .q ( q )     //读出数据
 );
ctrl  u1(
  .clk(clk),
  .rst_n(rst_n),
  .addr(addr)
   );
endmodule
//===========ctrl控制模块============//
module ctrl(
  clk,rst_n,
  addr
   );
input clk,rst_n;
output[4:0] addr; 
reg[3:0] cnt;
reg[4:0] addr_r;
always@(posedge clk or negedge rst_n)
if(!rst_n)
 cnt<=4'd0;
else
 cnt<=cnt+1'b1;
//地址的自加过程
always@(posedge clk or negedge rst_n)
if(!rst_n)
 addr_r<=5'd0;
else if(cnt==4'd15)
  addr_r<=addr+1'b1; 
assign addr=addr_r;  
endmodule  
时序图:
FPGA中M4K的笔记 - 木头 - 木头
 
 
 
 
//========================FIFO==========================//
 
摘自:http://xuedeyumu.blog.163.com/blog/static/182871571201132053753679/