1.框架
1.1 逻辑框图
1.2 gray转换框图,注意二进制地址和格雷码转换要同步
2.代码实现
2.1 写控制模块
2.1.1 端口和参数定义
2.1.2 给ram产生二进制地址,再经过二进制寄存器
2.1.3 对产生的写地址转换格雷码,再经过格雷码寄存器
2.1.4 在w_clk对读模块产生的读格雷码指针打两拍
2.1.5 产生写满信号
对比gray-code 7和15 要对高位和次高位都取反
2.2 读控制模块
2.2.1 端口和参数定义
2.2.2 给ram产生二进制读地址,再经过二进制寄存器
2.2.3 对产生的读地址进行格雷码准换,再经过格雷码寄存器
2.2.4 在r_clk对写模块产生的写格雷码指针打两拍
2.2.5 产生读空信号
#步骤总结#
2.3 例化ram
先生成ipcore
去掉产生的读写地址的msb送进ram
2.4 顶层例化top
3.编写tb
3.1参数 时间单位 端口定义
3.2 读写时钟定义 以及初始化读写模块
3.3 利用task 进行数据读写
task 任务名;// 不要漏分号!!!!!
…
//1.声明变量,举例:
integer i;
//2.赋值 编程
begin
赋值逻辑
比如:for(...)begin
@(posedge clk)
end
end
@(posedge clk)
endtask
initial 一上电就执行,仅执行一次 !
3.4 例化顶层
4. 仿真波形
4.1利用脚本 跑modelsim
quit -sim
.main clear
vlib work
vlog ./tb_fifo_top.v
vlog ./../design/*.v
vlog ./../ipcore
vsim -voptars=+acc work.tb_fifo_top
add wave tb_fifo_top/fifo_top_inst/*
run 20us
4.2
观察波形
4.2.1 写进去256个数据 0-255
4.2.2写满信号在写data 8ff时候拉高
4.2.3读空信号在读data 8ff时候拉高
4.2.4