当前位置:网站首页>【牛客网刷题系列 之 Verilog进阶挑战】~ 多bit MUX同步器
【牛客网刷题系列 之 Verilog进阶挑战】~ 多bit MUX同步器
2022-07-07 17:06:00 【AI很不错呦】
目录:
0. 前言
有几天没更新牛客刷题的博客了,最近有事在忙,只能尽量做到每天一更了!!!一边刷题,一边做点小demo,不断学习。
今天这个题主要是一个跨时钟域的多位数据传输,也是比较常见的一种题型,挺有用的,关于跨时钟域怎么处理,可以移步到我之前写的一篇博客,传送门
1. VL48 多bit MUX同步器
1.1 题目描述
在data_en为高期间,data_in将保持不变,data_en为高至少保持3个B时钟周期。表明,当data_en为高时,可将数据进行同步。
本题中data_in端数据变化频率很低,相邻两个数据间的变化,至少间隔10个B时钟周期。
1.1.1 信号示意图


1.1.2 波形示意图
无
1.1.3 输入描述
input clk_a ,
input clk_b ,
input arstn ,
input brstn ,
input [3:0] data_in ,
input data_en
1.1.4 输出描述
output reg [3:0] dataout
1.2 解题思路
我们根据题意大概框架如下:
其中,红色框框表示的是数据暂存 以及 使能暂存;蓝色框框表示跨时钟域处理,采用打两拍的形完成;绿色框框表示MUX选择以及暂存的结果输出。
1.3 代码实现
`timescale 1ns/1ns
module mux(
input clk_a ,
input clk_b ,
input arstn ,
input brstn ,
input [3:0] data_in ,
input data_en ,
output reg [3:0] dataout
);
//暂存data_en
reg data_en_reg;
always @ (posedge clk_a or negedge arstn) begin
if(!arstn) begin
data_en_reg <= 1'b0;
end
else begin
data_en_reg <= data_en;
end
end
//data_in
reg [3:0] data_in_reg;
always @ (posedge clk_a or negedge arstn) begin
if(!arstn) begin
data_in_reg <= 4'd0;
end
else begin
data_in_reg <= data_in;
end
end
//打两拍,跨时钟域过渡
reg data_en_ab1, data_en_ab2;
always @ (posedge clk_b or negedge brstn) begin
if(!brstn) begin
data_en_ab1 <= 1'b0;
data_en_ab2 <= 1'b0;
end
else begin
data_en_ab1 <= data_en_reg;
data_en_ab2 <= data_en_ab1;
end
end
// MUX
always @ (posedge clk_b or negedge brstn) begin
if(!brstn) begin
dataout <= 4'd0;
end
else begin
dataout <= data_en_ab2 ? data_in_reg : dataout;
end
end
endmodule
1.4 测试文件
待更新。。。
1.5 仿真波形
待更新。。。
声明
本人所有系列的文章,仅供学习,不可商用,如有侵权,请告知,立删!!!
本人主要是记录学习过程,以供自己回头复习,再就是提供给后人参考,不喜勿喷!!!
如果觉得对你有用的话,记得收藏+评论!!!
边栏推荐
- Embedded interview questions (algorithm part)
- 学习open62541 --- [67] 添加自定义Enum并显示名字
- Charles+drony的APP抓包
- 博睿数据入选《2022爱分析 · IT运维厂商全景报告》
- 2022上半年朋友圈都在传的10本书,找到了
- Big Ben (Lua)
- App capture of charles+drony
- The top of slashdata developer tool is up to you!!!
- Comparison and selection of kubernetes Devops CD Tools
- Cadre de validation des données Apache bval réutilisé
猜你喜欢

Calculation of torque target value (ftorque) in servo torque control mode

链式二叉树的基本操作(C语言实现)

10 schemes to ensure interface data security

多个kubernetes集群如何实现共享同一个存储

RISCV64

Micro service remote debug, nocalhost + rainbow micro service development second bullet

Zhong Xuegao wants to remain innocent in the world

Mathematical analysis_ Notes_ Chapter 11: Fourier series

3. About cookies

DeSci:去中心化科学是Web3.0的新趋势?
随机推荐
Micro service remote debug, nocalhost + rainbow micro service development second bullet
CVPR 2022 - learning non target knowledge for semantic segmentation of small samples
Flipping game (enumeration)
直播预约通道开启!解锁音视频应用快速上线的秘诀
Redis集群与扩展
SlashData开发者工具榜首等你而定!!!
Realize payment function in applet
[unity shader] insert pass to realize the X-ray perspective effect of model occlusion
Redis的发布与订阅
[mime notes]
企业展厅设计中常用的三种多媒体技术形式
Zhong Xuegao wants to remain innocent in the world
鸿蒙智能家居【1.0】
coming! Gaussdb (for Cassandra) new features appear
国内的软件测试会受到偏见吗
ES6笔记一
Comparison and selection of kubernetes Devops CD Tools
How much does it cost to develop a small program mall?
Thread factory in thread pool
手把手教姐姐写消息队列