12.5单端口RAM,JS计数器,流水线乘法器,不重叠序列检测器(状态机+移位寄存器),信号发生器,交通灯

单端口RAM 

`timescale 1ns/1nsmodule RAM_1port(input clk,input rst,input enb,input [6:0]addr,input [3:0]w_data,output wire [3:0]r_data
);reg [6:0]mem[127:0];integer i;always @(posedge clk or negedge rst) beginif(!rst) beginfor (i=0; i<127 ; i=i+1) beginmem[i] <= 'b0;endendelse if (enb) beginmem[addr] <= w_data;endendassign r_data = (!enb)?mem[addr]:'b0;endmodule

JS计数器

`timescale 1ns/1nsmodule JC_counter(input                clk ,input                rst_n,output reg [3:0]     Q  
);always@(posedge clk or negedge rst_n)beginif(!rst_n) Q <= 'd0;else Q <= {~Q[0], Q[3 : 1]};end
endmodule

流水线乘法器

 assign mul_1 = mul_b[0]? mul_a: 0;assign mul_2 = mul_b[1]? mul_a<<1: 0;assign mul_3 = mul_b[2]? mul_a<<2: 0;assign mul_4 = mul_b[3]? mul_a<<3: 0;

这步就是竖式乘法,认为是b个a相加在一起,b的最低位上的数字意味着有1个a,b[1]位上的数字意味着有2个a,b[2]意味有4个,B【3】意味有8个。所以就采用移位方式。

  assign sum_1 = {size*(1'b0),mul_r1} + {size*(1'b0),mul_r2};assign sum_2 = {size*(1'b0),mul_r3} + {size*(1'b0),mul_r4};
`timescale 1ns/1nsmodule multi_pipe#(parameter size = 4
)(input 						clk 		,   input 						rst_n		,input	[size-1:0]			mul_a		,input	[size-1:0]			mul_b		,output	reg	[size*2-1:0]	mul_out		
);//parameter parameter N = size * 2;//definationwire [N - 1 : 0] temp [0 : 3];reg [N - 1 : 0] adder_0;reg [N - 1 : 0] adder_1;//output genvar i;generatefor(i = 0; i < 4; i = i + 1)begin : loopassign temp[i] = mul_b[i] ? mul_a << i : 'd0;endendgeneratealways@(posedge clk or negedge rst_n)beginif(!rst_n) adder_0 <= 'd0;else adder_0 <= temp[0] + temp[1];endalways@(posedge clk or negedge rst_n)beginif(!rst_n) adder_1 <= 'd0;else adder_1 <= temp[2] + temp[3];endalways@(posedge clk or negedge rst_n)beginif(!rst_n) mul_out <= 'd0;else mul_out <= adder_0 + adder_1;end
endmodule

这里注意temp[]的位数是N-1.即两倍的乘法位数。

变量名前的【】表示变量的位宽,每位的位宽。变量名后的【】表示数组长度,相同变量的个数,串在一起。

不重叠序列检测

状态机

`timescale 1ns/1ns
module sequence_detect(input clk,input rst_n,input data,output reg match,output reg not_match);parameter ZERO=0, ONE=1, TWO=2, THREE=3, FOUR=4, FIVE=5, SIX=6, FAIL=7;reg [2:0] state, nstate;reg [2:0] cnt;always@(posedge clk or negedge rst_n) beginif(~rst_n)cnt <= 0;elsecnt <= cnt==6? 1: cnt+1; endalways@(posedge clk or negedge rst_n) beginif(~rst_n)state <= ZERO;elsestate <= nstate;endalways@(*) beginif(~rst_n)nstate = ZERO;elsecase(state)ZERO : nstate = data? FAIL : ONE;ONE  : nstate = data? TWO  : FAIL;TWO  : nstate = data? THREE: FAIL;THREE: nstate = data? FOUR : FAIL;FOUR : nstate = data? FAIL : FIVE;FIVE : nstate = data? FAIL : SIX;SIX  : nstate = data? FAIL : ONE;FAIL : nstate = cnt==6&&data==0? ONE: FAIL;default: nstate = ZERO;endcaseendalways@(*) beginif(~rst_n) beginmatch     = 0;not_match = 0;endelse beginmatch     = cnt==6&&state==SIX;not_match = cnt==6&&state==FAIL;endendendmodule
FAIL : nstate = cnt==6&&data==0? ONE: FAIL;

移位寄存器

`timescale 1ns/1ns
module sequence_detect(input clk,input rst_n,input data,output reg match,output reg not_match);reg [2:0] cnt;reg [5:0] data_r;always@(posedge clk or negedge rst_n) beginif(~rst_n)cnt <= 0;else cnt <= cnt==5? 0: cnt+1;endalways@(posedge clk or negedge rst_n) beginif(~rst_n)data_r <= 6'b0; elsedata_r <= {data_r[4:0], data};endalways@(posedge clk or negedge rst_n) beginif(~rst_n) beginmatch     <= 1'b0;not_match <= 1'b0;endelse beginmatch     <= (cnt==5) && ({data_r[4:0], data}==6'b011100);not_match <= (cnt==5) && ({data_r[4:0], data}!=6'b011100);endendendmodule

判断必须要这样判断,不可写为~match。

因为要match时,是要取反的是当下周期,但是由于是非阻塞,此时macth是上个周期的,但非阻塞,就会导致下个Not_match取反的就是上个周期的match而不是当下周期的,下个周期的match取反才是需要的

需要注意由于是非阻塞,所以当前进入的数据会在下一个周期里才会进入寄存器,所以在本周期中如果要输出,就需要额外再移位判断一下

信号发生器

在方波时,

// 仅在方波模式工作的计数器
always@(posedge clk or negedge rst_n) beginif(~rst_n)cnt <= 0;elsecnt <= wave_choise!=0 ? 0:cnt        ==19? 0:cnt + 1;
end

如果波形选择不是0,即!=0成立,那么cnt就一直保持为0;不然就是==0成立,然后判断cnt是不是等于19,如果是的话,就复位,重新计数,不然就+1 

wave <= cnt ==9 ? 20: cnt ==19? 0 :wave;

 就是cnt是只在方波模式下才工作的,先判断cnt是否==9,是的话就让wave=20;不是的话,就判断是不是等于19,是的话复位到0,不然就保持,这样实现出来的话,每个周期下,前半个周期是低电平,只有到cnt==9时,wave在下个周期设置为20,才会在后半个周期显示为高电平。

`timescale 1ns/1ns
module signal_generator(input clk,input rst_n,input [1:0] wave_choise,output reg [4:0]wave);reg [4:0]cnt;reg up;always @(posedge clk or negedge rst_n)if (!rst_n)begin wave <= 0;cnt <= 0;endelse case (wave_choise)2'b00:				//产生方波,保持0十个时钟,保持20十个时钟beginif (cnt == 19)begin	wave <= 0;cnt <= 0;endelse if(cnt == 9)begin	wave <= 20;cnt <= cnt + 1;endelsebeginwave <= wave;cnt <= cnt + 1;endend2'b01:				//产生锯齿,0递增到20beginif (wave == 20)beginwave <= 0;endelse beginwave <= wave + 1;endend2'b10:beginif (wave == 20)beginwave <= wave - 1;up <= 0;endelse if (wave == 0)beginwave <= wave + 1;up <= 1;endelse if (up)beginwave <= wave + 1;endelse beginwave <= wave - 1;endenddefault:beginwave <= 1;endendcase
endmodule

交通灯

竞争与险象

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/209260.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux--权限问题(1)

前文 Linux--初识和基本的指令&#xff08;1&#xff09;-CSDN博客 Linux--初识和基本的指令&#xff08;2&#xff09;-CSDN博客 Linux--初识和基本的指令&#xff08;3&#xff09;-CSDN博客 目录 前文 前言 1.剩余指令部分 1.1 打包和压缩的其它指令 2.权限部分 2.1权…

Qt基础-程序打包发布方法

本文讲解Qt程序打包发布方法。 一、使用Qt自带的windeployqt 生成可运行的包 准备将Qt生成的exe拷入到单独的文件夹,并进行命名,本文命名为packDemorun,并将文件放到D盘(自己随意放置) 1、找到Qt自带的命令终端 2、启动命令终端 3、输入:cd /d D:\packDemorun,进入文…

IDEA删除最近打开的文件记录

IDEA删除最近打开的文件记录 遇见问题&#xff1a;如何删除IDEA中最近打开的文件记录 解决方法 先关闭IDEA 找到 recentProjects.xml 文件 windows 位置&#xff1a;&#xff08;AppData是隐藏文件夹&#xff09; 1.C:\Users\电脑用户名\AppData\Roaming\JetBrains\IntelliJIde…

Git 请输入一个提交信息以解释此合并的必要性

操作方法&#xff1a;按住Ctrl加下面的某个字母

linux-man命令的使用及练习

目录 1. 命令概述 2. 使用 3. 练习 ?man services时报错&#xff1a;No manual entry for services的解决办法 4. man命令中常用按键以及用途 1. 命令概述 Linux提供了丰富的帮助手册&#xff0c;当你需要查看某个命令的参数时不必到处上网查找&#xff0c;只要man一下即…

AI降重软件,AI降重后原创高质量文章

在当今信息爆炸的时代&#xff0c;写作与创作的重要性日益凸显。随着大量内容的涌现&#xff0c;文章降重成为了许多作者和内容创作者的一大问题。本文将专心分享该软件的优势&#xff0c;并为广大用户推荐几款好用的AI降重软件。 AI降重使用场景 AI降重技术利用机器学习算法和…

OpenCV图像相似性比对算法

背景 在做图像处理或者计算机视觉相关的项目的时候&#xff0c;很多时候需要我们对当前获得的图像和上一次的图像做相似性比对&#xff0c;从而找出当前图像针对上一次的图像的差异性和变化点&#xff0c;这需要用到OpenCV中的一些图像相似性和差异性的比对算法&#xff0c;在O…

使用LangSmith来快速学习LangChain

好风凭借力&#xff0c;送我上青云&#xff01; 什么是LangSmith LangSmith is a platform for building production-grade LLM applications. It lets you debug, test, evaluate, and monitor chains and intelligent agents built on any LLM framework and seamlessly int…

Python学习路线 - Python语言基础入门 - 循环语句

Python学习路线 - Python语言基础入门 - 循环语句 前言为什么学习循环语句 while循环的基础语法while循环语句while循环注意点 while循环的基础案例while循环的嵌套应用while循环的嵌套 while循环的嵌套案例补充知识 - print输出不换行补充知识 - 制表符\t练习案例 - 打印九九乘…

创建dockerSwarm nfs挂载

创建dockerSwarm nfs挂载 nfs高可用部署(lsyncd两主机双向同步) nfs高可用部署(lsyncd三主机三向同步) 1. 通过 Volume 1.1 创建 Docker Volume 每个 swarm 节点均创建相同名称的 Docker Volume&#xff08;名称为 nfs120&#xff09; docker volume create --driver local …

外贸找客户软件工具:BotMaster 18.5 Crack

BotMaster 拓展您的业务大师增加销量Whatsapp营销&#xff0c;使用 BotMaster 将您的业务提升到新的水平 - 最强大的 WhatsApp 营销软件&#xff0c;可促进销售和发展您的业务。 BotMaster 是一款革命性的 WhatsApp 营销工具&#xff0c;于 2022 年 1 月推出。这款功能强大的工…

10 大 Mac 数据恢复软件深度评测

对于任何依赖计算机获取重要文件&#xff08;无论是个人照片还是重要商业文档&#xff09;的人来说&#xff0c;数据丢失可能是一场噩梦。值得庆幸的是&#xff0c;有多种专门为 Mac 用户提供的数据恢复工具&#xff0c;可以帮助检索丢失或意外删除的文件。在本文中&#xff0c…

HNU计算机体系结构-实验3:多cache一致性算法

文章目录 实验3 多cache一致性算法一、实验目的二、实验说明三 实验内容1、cache一致性算法-监听法模拟2、cache一致性算法-目录法模拟 四、思考题五、实验总结 实验3 多cache一致性算法 一、实验目的 熟悉cache一致性模拟器&#xff08;监听法和目录法&#xff09;的使用&am…

Spring Security 6.x 系列(10)—— SecurityConfigurer 配置器及其分支实现源码分析(二)

一、前言 在本系列文章&#xff1a; Spring Security 6.x 系列&#xff08;4&#xff09;—— 基于过滤器链的源码分析&#xff08;一&#xff09; 中着重分析了Spring Security在Spring Boot自动配置、 DefaultSecurityFilterChain和FilterChainProxy 的构造过程。 Spring …

Oauth2.0 认证

目录 前言 1.介绍 2.Oauth2.0过程详解 3.Oauth 整合到 Spring Boot 实践 4.方法及配置详解&#xff1a; 总结 前言 Oauth2.0 是非常流行的网络授权表准&#xff0c;已经广泛应用在全球范围内&#xff0c;比较大的公司&#xff0c;如腾讯等都有大量的应用场景。 1.介绍 …

ARP欺骗攻击

一.大概原理 ARP&#xff1a;address solution protocol 地址解析协议 ARP是一种基于局域网的TCP/IP协议&#xff0c;arp欺骗就是基于此协议的漏洞来达成我们的目的的&#xff0c;局域网中的数据传输并不是用ip地址传输的&#xff0c;而是靠mac地址。 我们如果出于某种目的想…

【Fastadmin】利用 build_select 做一个树状下拉选择框

1.效果展示 系统crud生成的下拉分类有些不是很好看&#xff0c;并且选择困难&#xff0c;看不出级差&#xff0c;效果如下&#xff1a; 经过 build_select 加工后的效果,美观好看&#xff0c;并添加上搜索功能: 2. 首先需要写一个树状图的数据格式 protected $datalist []; pu…

前沿科技与医药领域碰撞,《AI制药方法与实践》课程重磅上线

药物发现是生物学、化学、医学、药学等基础研究与工业转化的重要窗口。近年来&#xff0c;AI技术的发展&#xff0c;为高投入、高失败率的制药行业带来了全新机遇&#xff0c;或将彻底改变传统制药的研究范式。为了帮助更多人了解并掌握这一前沿技术&#xff0c;百度飞桨联合清…

LeedCode刷题---滑动窗口问题

顾得泉&#xff1a;个人主页 个人专栏&#xff1a;《Linux操作系统》 《C/C》 《LeedCode刷题》 键盘敲烂&#xff0c;年薪百万&#xff01; 一、长度最小的子数组 题目链接&#xff1a;长度最小的子数组 题目描述 给定一个含有 n 个正整数的数组和一个正整数 target 。…

uniapp各种小程序分享 share - 主要流程 - 微信、抖音、快手、qq

参考 小程序环境 分享 | uni-app官网uni-app,uniCloud,serverless,分享,uni.share(OBJECT),分享到微信聊天界面示例代码,分享到微信朋友圈示例代码,uni.share 在App端各社交平台分享配置说明,uni.shareWithSystem(OBJECT),plus.share.sendWithhttps://uniapp.dcloud.net.cn/a…