FIFO 的控制逻辑---verilog代码
FIFO 的控制逻辑---verilog代码
//fifo的例化
wire fifo_full;
wire fifo_empty;
wire [ : ] fifo_dout;
wire [:]rd_data_count;
wire [:]wr_data_count; fifo_generator_0 U1 (
.rst(reset_fifo),
.wr_clk(rx_usrclk), // input wire wr_clk
.rd_clk(tx_usrclk_1), // input wire rd_clk
.din(din), // input wire [9 : 0] din
.wr_en(wr_en), // input wire wr_en
.rd_en(rd_en), // input wire rd_en
.dout(fifo_dout), // output wire [9 : 0] dout
.full(fifo_full), // output wire full
.empty(fifo_empty), // output wire empty
.rd_data_count(rd_data_count), // output wire [9 : 0] rd_data_count
.wr_data_count(wr_data_count) // output wire [9 : 0] wr_data_count
); //fifo的复位方式,通过vio核手动复位
wire reset_fifo;
vio_2 U2 (
.clk(clk_27M), // input wire clk
.probe_out0(reset_fifo) // output wire [0 : 0] probe_out0
); //*****************************************************************************
//1.fifo写操作的控制
//2.fifo刚开始工作时,先写满一半,然后fifo读操作才开始
//3.fifo达到full状态时,写操作停止,读操作继续,当检测到fifo里面的数据还剩下一
//半时,写操作再次开始工作
//4.fifo达到empty状态时,读操作停止,还需要等待read_start信号的到来才能再次启动
//读操作,即fifo从空的状态写到了一半
//***************************************************************************** reg [:]i;
reg read_start;
reg wr_en_r;
reg [:]din_r; always@(posedge rx_usrclk)
begin
if(reset_fifo)
begin
i <= 'd0;
read_start <= 'b0;
wr_en_r <= 'b0;
din_r <= 'd0;
end
else
begin
case(i)
'd0:
begin
if(!fifo_full)
begin
wr_en_r <= 'b1;
i<=i+'b1;
end
else
wr_en_r <= 'b0;
end 'd1:
begin
if(fifo_full)
begin
wr_en_r <= 'b0;
i<=i+'b1;
end
else if(fifo_empty)
read_start <= 'b0;
else
begin
din_r <= rx_ds1a;
if(wr_data_count >='d16384)
read_start <= 'b1;
end
end 'd2:
begin
if(wr_data_count <='d16384)
begin
wr_en_r <= 'b1;
i<='d1;
end
end default:
begin
wr_en_r <= 'b0;
read_start <='b0;
end
endcase
end
end wire [:]din;
wire wr_en;
wire [:]i_w;
wire read_start_w; assign wr_en = rx_ce ? wr_en_r : 'b0;
assign din = din_r;
assign i_w = i;
assign read_start_w = read_start; reg rd_en_r;
reg [:]j; always@(posedge tx_usrclk_1)
begin
if(reset_fifo)
begin
rd_en_r <= 'b0;
j <= 'd0;
end
else
begin
case(j)
'd0:
begin
if(read_start && !fifo_empty)
begin
rd_en_r <= 'b1;
j<=j+'b1;
end
else
rd_en_r <= 'b0;
end 'd1:
begin
if(fifo_empty)
begin
rd_en_r <= 'b0;
j<='d0;
end
end default:
begin
rd_en_r <= 'b0;
j <= 'd0;
end
endcase
end
end wire rd_en;
wire [:]j_w; assign j_w = j;
assign rd_en = tx_ce[] ? rd_en_r : 'b0;
备注:分两个always块(因为fifo的读和写在不同的时钟域),对fifo的读写操作进行控制。
FIFO 的控制逻辑---verilog代码的更多相关文章
- 分享:FIFO 同步、异步以及Verilog代码实现
FIFO 很重要,之前参加的各类电子公司的逻辑设计的笔试几乎都会考到. FIFO是英文First In First Out 的缩写,是一种先进先出的数据缓存器,他与普通存储器的区别是没有外部读写地址线 ...
- Verilog代码规范I
Verilog代码规范I "规范"这问题 "规范"这个富含专业气息的词汇(个人感觉),其实规范这种东西,就是大家都约定熟成的东西,一旦你不遵守这个东西,专业人士 ...
- 时钟分频方法---verilog代码
时钟分频方法---verilog代码 本文以SDI播出部分的工程为例,来说明一种时钟分频的写法.SD-SDI工程中播出时钟tx_usrclk为148.5MHz,但tx_video_a_y_in端的数据 ...
- Verilog代码和FPGA硬件的映射关系(一)
代码和硬件之间的映射关系是一个很奇妙的过程,也展现出人类的智慧.单片机内部的硬件结构都是固定的,无法改变,我们通过代码操作着寄存器的读写,来执行各种复杂的任务.FPGA的硬件结构并不像单片机一样是固定 ...
- 学会使用Hdlbits网页版Verilog代码仿真验证平台
给大家推荐一款网页版的 Verilog代码编辑仿真验证平台,这个平台是国外的一家开源FPGA学习网站,通过“https://hdlbits.01xz.net/wiki/Main_Page” 地址链接进 ...
- Verilog代码和FPGA硬件的映射关系(三)
组合逻辑和FPGA之间的映射关系我们知道了,那时序逻辑和FPGA之间又是一种怎样的映射关系呢?我们就以前面寄存器章节的例子来向大家说明,也一同把当时为什么用异步复位更节约资源的原因告诉大家.我们先来看 ...
- Verilog代码和FPGA硬件的映射关系(二)
大家可能会有这样的疑问,我们编写的Verilog代码最终会在FPGA上以怎样的映射关系来实现功能呢?我们以一个最简单的组合逻辑与门为例来向大家说明.RTL代码如下所示: //------------- ...
- HD,3G视频数据中行号的插入方法---Verilog代码实现
HD,3G视频数据中行号的插入方法---Verilog代码实现 行号的生成: `timescale 1ns / 1ps //////////////////////////////////////// ...
- 串口接收端verilog代码分析
串口接收端verilog代码分析 `timescale 1ns / 1ps ////////////////////////////////////////////////////////////// ...
随机推荐
- Python 关联关系
class Boy: def __init__(self, name, girlFriend=None): # 在初始化的时候可以给一个对象的属性设置成另一个类的对象 self.girlFriend ...
- 记第十四届省赛参赛体会&第十三届
emmm....时间还是很久远了 还是流水账 这次比赛我还是挺开心的 因为感觉我们余神就是一把宝剑,然后我是她的Buff 前面四道题就挺顺利都1A过了,十年余神就是强无敌呀 最后两分钟过了第五题,银牌 ...
- 基于NEO的私链(Private Blockchain)
1.准备工作 1.NEO-GUI 2.NEO-CLI 3..NET Core Runtime (不能是2.x版本,官方建议是1.12,实际上我用1.14也是没有问题的) 4.四台windows操作系统 ...
- oracle函数创建及调用
创建函数的语法如下: CREATE [OR REPLACE] FUNCTION function_name[ (argment [ { IN | OUT | IN OUT } ] Type , arg ...
- mariaDB的安装 apache的安装
1.mariaDB的安装: 下载安装包: wget -c https://downloads.mariadb.com/MariaDB/mariadb-10.3.6/bintar-linux-glibc ...
- wireshark显示过滤器的几种用法(转自他人博客)
本文章转自:http://blog.51cto.com/houm01/1872652 几种条件操作符 == eq 等于 ip.addr == 192.168.0.1 ip.addr ...
- 模块化,AMD规范
模块化:代码量比较大,可能会有几个人同时写一个页面,同样写在一个文件里面,可能会有冲突,模块化可以解决代码的冲突(匿名函数调用,自己调用自己,就是立即执行函数) 团队的分工更加的明确 异步的执行: A ...
- windows server 2008 R2无法共享文件夹,无法启用网络发现。
问题描述:在局域网内两台window server 2008 R2服务器上设置共享文件夹,如要再网络中可以看到文件夹,需要开启“网络发现” 但是即使打开了“网络发现”,当重新打开“高级共享设置”的时候 ...
- 安装,配置,启动FTP,SSH,NFS服务
1.安装,配置,启动FTP服务 sudo apt-get install vsftpd 修改vsftpd的配置文件/etx/vsftpd/.config,将下面几行前面的“#”去掉 #local_en ...
- 《DSP using MATLAB》Problem 6.20
先放子函数: function [C, B, A, rM] = dir2fs_r(h, r); % DIRECT-form to Frequency Sampling form conversion ...