当前位置: 首页 > news >正文

FPGA/Verilog HDL/AC620零基础入门学习——8*8同步FIFO实验

实验要求

该项目主要实现一个深度为8、位宽为8bit的同步FIFO存储单元。模块功能应包括读控制、写控制、同时读写控制、FIFO满状态、FIFO空状态等逻辑部分。
该项目由一个功能模块和一个testbench组成。其中功能模块的端口信号如下表所示。
在这里插入图片描述
在这里插入图片描述
提示:
(1)设定一个写地址waddr[2:0],每来一个写使能wr,则写地址加一;
(2)设定一个读地址raddr[2:0],每来一个读使能rd,则读地址加一;
(3)若同时读写,则读写地址不变,只是将输入数据din直接赋值给dout;
(4)FIFO中数据的个数cout=waddr-raddr;
(5)状态指示:

  • 当cout=8时,FIFO满(full=1);
  • 当cout=6时,FIFO快满了(almost_full=1);
  • 当cout=4时,FIFO半满(半空)(half=1);
  • 当cout=2时,FIFO快空了(almost_empty=1);
  • 当cout=0时,FIFO空(empty=1);

sfifo

module sfifo(clk,rst_n,data_in,wr,rd,full,empty,data_out,sfifo_cnt,half,almost_empty,almost_full);input clk;input rst_n;input [7:0] data_in;input wr;input rd;output full;output empty;output almost_full;output almost_empty;output half;output [7:0] data_out;output [3:0] sfifo_cnt;wire clk;wire rst_n;wire [7:0] data_in;wire wr;wire rd;wire full;wire empty;wire almost_full;wire almost_empty;wire half;reg [7:0] data_out;reg [3:0] sfifo_cnt;`define DEL 1 // Clock-to-output delayreg [7:0] sfifo_ram[0:7];  // sfifo_ram initializedreg [2:0] rd_ptr;  // Read pointerreg [2:0] wr_ptr;  // Write pointer assign empty = ( sfifo_cnt == 0 ) ? 1 : 0;  //Empty signalassign full  = ( sfifo_cnt == 8 ) ? 1 : 0;  //Full signalassign almost_full  = ( sfifo_cnt == 6 ) ? 1 : 0; //Almost Full signalassign almost_empty  = ( sfifo_cnt == 2 ) ? 1 : 0;//Almost Empty signalassign half  = ( sfifo_cnt == 4 ) ? 1 : 0;//HALF signal// sfifo_cnt changed// 当读有效, cnt--// 当写有效, cnt++always @( posedge clk or negedge rst_n) beginif( ~rst_n ) beginsfifo_cnt <= #`DEL 4'h0;endelse if( rd && ~wr ) beginsfifo_cnt <= #`DEL sfifo_cnt - 1;endelse if( ~rd && wr ) beginsfifo_cnt <= #`DEL sfifo_cnt + 1;endelse begin sfifo_cnt <= sfifo_cnt;endend      always @( posedge clk or negedge rst_n) beginif( ~rst_n ) beginrd_ptr <= #`DEL 3'h0;endelse if( rd ) beginif( rd_ptr == 3'h7 ) beginrd_ptr <= #`DEL 3'h0;endelse beginrd_ptr <= #`DEL rd_ptr +1;endendelse beginrd_ptr <= rd_ptr;endend    always @( posedge clk or negedge rst_n) beginif( ~rst_n ) beginwr_ptr <= #`DEL 3'h0;endelse if( wr ) beginif( wr_ptr == 3'h7 ) beginwr_ptr <= #`DEL 3'h0;endelse beginwr_ptr <= #`DEL wr_ptr +1;endendelse beginwr_ptr <= wr_ptr;endend always @( posedge clk or negedge rst_n) beginif( ~rst_n ) begindata_out <= #`DEL 8'h0;endelse if( wr ) beginsfifo_ram[wr_ptr] <= #`DEL data_in;endelse if( rd ) begin data_out <= #`DEL sfifo_ram[rd_ptr];endend      endmodule   

sfifo_test

module sfifo_test();reg clk;reg rst_n;reg [7:0] data_in;reg wr;reg rd;wire full;wire empty;wire almost_full;wire almost_empty;wire half;wire [7:0] data_out;wire [3:0] sfifo_cnt;initial beginrst_n=1;clk=0;wr=0;rd=0;data_in=0;#1 rst_n=0;#5 rst_n=1;#3 wr=1;#5 rd=1;#5 rd=0;#5 wr=0;#5 wr=1;#10 rd=1;#10 rd=0;endalways begin#5 clk=~clk;endalways @(posedge clk or negedge rst_n) beginif (~rst_n) begindata_in<=0;wr<=0;rd<=0;endelse begindata_in<=$random;endendinitial begin$dumpfile ("F:/Robei/practice/prac_07_sfifo/sfifo_test.vcd");$dumpvars;#5000;$stop;end//---Module instantiation---sfifo sfifo1(.clk(clk),.rst_n(rst_n),.data_in(data_in),.wr(wr),.rd(rd),.full(full),.empty(empty),.almost_full(almost_full),.almost_empty(almost_empty),.half(half),.data_out(data_out),.sfifo_cnt(sfifo_cnt));endmodule    

实验结果

整体波形

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

同时读写

在这里插入图片描述

相关文章:

FPGA/Verilog HDL/AC620零基础入门学习——8*8同步FIFO实验

实验要求 该项目主要实现一个深度为8、位宽为8bit的同步FIFO存储单元。模块功能应包括读控制、写控制、同时读写控制、FIFO满状态、FIFO空状态等逻辑部分。 该项目由一个功能模块和一个testbench组成。其中功能模块的端口信号如下表所示。 提示&#xff1a; &#xff08;1&a…...

shell脚本

shell函数 函数分类&#xff1a; 系统函数 自定义函数 常用系统函数&#xff1a; basename 从指定路径中获取文件名 dirname 从指定路径中获取目录名&#xff0c;去掉文件名 自定义函数 # 函数的定义 函数名 () { 命令 # 使用$n获取函数的参数 [return 返回…...

不部署服务端调用接口,前端接口神器json-server

简介 json-server 是一款小巧的接口模拟工具&#xff0c;一分钟内就能搭建一套 Restful 风格的 API&#xff0c;尤其适合前端接口测试使用。 只需指定一个 json 文件作为 api 的数据源即可&#xff0c;使用起来非常方便&#xff0c;30秒入门&#xff0c;基本上有手就行。 进阶…...

国产化:复旦微JFM7K325T +华为海思 HI3531DV200 的综合视频处理平台

板卡概述 TES714 是自主研制的一款 5 路 HD-SDI 视频采集图像处理平台&#xff0c;该平台采用上海复旦微的高性能 Kintex 系列 FPGA 加上华为海 思的高性能视频处理器 HI3531DV200 来实现。 华为海思的 HI3531DV200 是一款集成了 ARM A53 四核处理 器性能强大的神经网络引擎…...

Ceph入门到精通- stderr raise RuntimeError(‘Unable to create a new OSD id‘)

/bin/podman: stderr raise RuntimeError(Unable to create a new OSD id) podman ps |grep osd.0 podman stop osd.0 容器id 重新添加osd.0 集群目录 cd /var/lib/ceph/e8cde810-e4b8-11ed-9ba8-98039b976596/1109 ls1110 rm -rf osd.01111 ceph orch daemon add osd…...

AWSFireLens轻松实现容器日志处理

applog应用程序和fluent-bit共享磁盘&#xff0c;日志内容是json格式数据&#xff0c;输出到S3也是JSON格式 applog应用部分在applog目录&#xff1a; Dockerfile文件内容 FROM alpine RUN mkdir -p /data/logs/ COPY testlog.sh /bin/ RUN chmod 777 /bin/testlog.sh ENTRYP…...

Java程序设计入门教程--案例:自由落体

程序模拟物体从10000米高空掉落后的反弹行为。 球体每落地一次&#xff0c;就会反弹至原高度的一半。按用户输入的弹跳次数&#xff0c;计算球体每次弹跳的高度。 实现过程&#xff1a; 1. 新建项目&#xff1b; 2. 接收 用户输入的弹跳次数&#xff1a; &#xff08;1&#…...

Qt音视频开发44-本地摄像头推流(支持分辨率/帧率等设置/实时性极高)

一、前言 本地摄像头推流和本地桌面推流类似&#xff0c;无非就是采集的设备源头换成了本地摄像头设备而不是桌面&#xff0c;其他代码完全一样。采集本地摄像头实时视频要注意的是如果设置分辨率和帧率&#xff0c;一定要是设备本身就支持的&#xff0c;如果不支持那就歇菜&a…...

SpringCloud学习(七)——统一网关Gateway

文章目录 1. 网关介绍2. 网关搭建2.1 引入依赖2.2 创建启动类2.3 编写配置2.4 测试 3. 路由断言工厂4. 路由过滤器4.1 过滤器配置4.2 全局过滤器4.3 过滤器执行顺序 5. 跨域问题处理 1. 网关介绍 到现在&#xff0c;我们可以使用Nacos对不同的微服务进行注册并管理配置文件&am…...

《花雕学AI》31:ChatGPT--用关键词/咒语/提示词Prompt激发AI绘画的无限创意!

你有没有想过用AI来画画&#xff1f;ChatGPT是一款基于GPT-3的聊天模式的AI绘画工具&#xff0c;它可以根据你输入的关键词/咒语/提示词Prompt来生成不同风格和主题的画作。Prompt是一些简短的文字&#xff0c;可以用来指导ChatGPT的创作过程。在这篇文章中&#xff0c;我将展示…...

计算机组成原理9控制单元的结构

9.1操作命令的分析 取值周期间址周期执行周期中断周期 取指周期数据流 PC存放下条指令的地址给MAR访问存储器相应单元&#xff0c;将数据取出来送给MDR寄存器&#xff0c;MDR取出来的内容送给IR指令寄存器&#xff0c;然后对指令进行译码&#xff0c;把指令的操作码部分取出…...

MySQL数据备份和恢复

MySQL数据备份和恢复 数据备份 mysqldump是MySQL数据库备份工具&#xff0c;可以备份MySQL数据库中的数据和结构&#xff0c;生成.sql文件&#xff0c;方便数据的迁移和恢复。 使用mysqldump工具前一定要配置环境变量 打开开始菜单&#xff0c;搜索“环境变量”。点击“编辑…...

数据结构与算法之链表: Leetcode 237. 删除链表中的节点 (Typescript版)

删除链表中的节点 https://leetcode.cn/problems/delete-node-in-a-linked-list/ 描述 有一个单链表的 head&#xff0c;我们想删除它其中的一个节点 node。 给你一个需要删除的节点 node 。你将 无法访问 第一个节点 head。 链表的所有值都是 唯一的&#xff0c;并且保证给…...

继承的相关介绍---C++

一、概念及定义 概念&#xff1a; 继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段&#xff0c;它允许程序员在保持原有类特性的基础上进行扩展&#xff0c;增加功能&#xff0c;这样产生新的类&#xff0c;称派生类。继承呈现了面向对象程序设计的层次结…...

Java多线程深入探讨

1. 线程与进程2. 创建和管理线程2.1. 继承Thread类2.2. 实现Runnable接口2.3 利用Callable、FutureTask接口实现。2.4 Thread的常用方法 3. 线程同步3.1. synchronized关键字3.1.1同步代码块&#xff1a;3.1.2 同步方法&#xff1a; 3.2. Lock接口 4. 线程间通信5. 线程池5.1 使…...

SpringCloud全面学习笔记之进阶篇

目录 前言微服务保护初识Sentinel雪崩问题及解决方案雪崩问题超时处理仓壁模式熔断降级流量控制总结 服务保护技术对比Sentinel介绍和安装微服务整合Sentinel 流量控制快速入门流控模式关联模式链路模式小结 流控效果warm up排队等待 热点参数限流全局参数限流热点参数限流案例…...

英语中主语从句的概念及其用法,例句(不断更新)

主语从句的原理 主语从句是一种充当整个句子主语的从句&#xff0c;主语从句构成的句子&#xff0c;是要以引导词开头的。它可以用名词性从属连词、关系代词或关系副词引导。主语从句通常位于谓语动词之前&#xff0c;用于表示动作、状态或事件的主体。 以下是一些常用的引导主…...

数组的子数组(亚阵列)、子序列,字符串的子串、子序列

数组 子数组 一个或连续多个数组中的元素组成一个子数组 子数组最少包含一个元素 数组 {1, 2, 3} 的子数组是 {1}, {1, 2}, {1, 2, 3}, {2}, {2, 3}&#xff0c; 和 {3}. 子序列 子序列就是在原来序列中找出一部分组成的序列 子序列不一定连续 相对位置还是不变 但是&#xff…...

MySQL 知识:迁移数据目录到其他路径

一、系统环境 操作系统&#xff1a;Centos 7 已安装环境&#xff1a;MySQL 8.0.26 二、开始操作 2.1 关闭SELinux 为了提高 Linux 系统的安全性&#xff0c;在 Linux 上通常会使用 SELinux 或 AppArmor 实现强制访问控制&#xff08;Mandatory Access Control MAC&#xff…...

Go | 一分钟掌握Go | 8 - 并发

作者&#xff1a;Mars酱 声明&#xff1a;本文章由Mars酱编写&#xff0c;部分内容来源于网络&#xff0c;如有疑问请联系本人。 转载&#xff1a;欢迎转载&#xff0c;转载前先请联系我&#xff01; 前言 当今编程界&#xff0c;一个好的编译型语言如果不支持并发&#xff0c…...

K8S认证|CKS题库+答案| 11. AppArmor

目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作&#xff1a; 1&#xff09;、切换集群 2&#xff09;、切换节点 3&#xff09;、切换到 apparmor 的目录 4&#xff09;、执行 apparmor 策略模块 5&#xff09;、修改 pod 文件 6&#xff09;、…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来

一、破局&#xff1a;PCB行业的时代之问 在数字经济蓬勃发展的浪潮中&#xff0c;PCB&#xff08;印制电路板&#xff09;作为 “电子产品之母”&#xff0c;其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透&#xff0c;PCB行业面临着前所未有的挑战与机遇。产品迭代…...

AI编程--插件对比分析:CodeRider、GitHub Copilot及其他

AI编程插件对比分析&#xff1a;CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展&#xff0c;AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者&#xff0c;分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...

JDK 17 新特性

#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持&#xff0c;不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的&#xff…...

ABAP设计模式之---“简单设计原则(Simple Design)”

“Simple Design”&#xff08;简单设计&#xff09;是软件开发中的一个重要理念&#xff0c;倡导以最简单的方式实现软件功能&#xff0c;以确保代码清晰易懂、易维护&#xff0c;并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计&#xff0c;遵循“让事情保…...

听写流程自动化实践,轻量级教育辅助

随着智能教育工具的发展&#xff0c;越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式&#xff0c;也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建&#xff0c;…...

GruntJS-前端自动化任务运行器从入门到实战

Grunt 完全指南&#xff1a;从入门到实战 一、Grunt 是什么&#xff1f; Grunt是一个基于 Node.js 的前端自动化任务运行器&#xff0c;主要用于自动化执行项目开发中重复性高的任务&#xff0c;例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...

20个超级好用的 CSS 动画库

分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码&#xff0c;而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库&#xff0c;可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画&#xff0c;可以包含在你的网页或应用项目中。 3.An…...

MySQL 知识小结(一)

一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库&#xff0c;分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷&#xff0c;但是文件存放起来数据比较冗余&#xff0c;用二进制能够更好管理咱们M…...

Qemu arm操作系统开发环境

使用qemu虚拟arm硬件比较合适。 步骤如下&#xff1a; 安装qemu apt install qemu-system安装aarch64-none-elf-gcc 需要手动下载&#xff0c;下载地址&#xff1a;https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x…...