【HDLBits 刷题 6】Circuits(2)Sequential Logic---Latches and Filp Flops

2023-11-11

目录

 

写在前面

Latches and Filp Flops

Dff

Dff8

Dff8r

Dff8p

Dff8ar

Dff16e

D Latch

DFF1

DFF2

DFF gate

Mux and DFF1

Mux and DFF2

DFFs and gates

creat circuit

Edgedetect

Edgedetect2

Edgecapture

Dualedge

总结


 

写在前面

本篇博客对 Circuits 部分的组合逻辑前两节做答案和部分解析,一些比较简单的题目就直接给出答案,有些难度再稍作讲解,每道题的答案不一定唯一,可以有多种解决方案,欢迎共同讨论。

Latches and Filp Flops

Dff

创建单个 D 触发器

module top_module (
    input       clk,    
    input       d,
    output reg  q 
);

always @(posedge clk) begin
	q <= d;
end

endmodule

Dff8

创建8位D触发器 

module top_module (
    input             clk,
    input     [7:0]   d,
    output    [7:0]   q
);
always @(posedge clk) begin
	q <= d;
end

endmodule

Dff8r

创建具有主动高同步复位功能的 8 D 触发器。所有 DFF 都应由 clk 的正边缘触发。 

module top_module (
    input             clk,
    input             reset,            
    input      [7:0]  d,
    output     [7:0]  q
);
always @(posedge clk) begin
	if (reset) begin
		q <= 'd0;
	end
	else begin
		q <= d;
	end
end

endmodule

Dff8p

创建具有主动高同步复位功能的 8 D 触发器。触发器必须重置为0x34而不是零。所有 DFF 都应由 clk 的负边沿触发。 

module top_module (
    input             clk,
    input             reset,
    input      [7:0]  d,
    output     [7:0]  q
);
always @(negedge clk) begin
	if (reset) begin
		q <= 8'h34;
	end
	else begin
		q <= d;
	end
end

endmodule

Dff8ar

创建具有有源高异步复位功能的 8 D 触发器。所有 DFF 都应由 clk 的正边缘触发。

module top_module (
    input        clk,
    input        areset,
    input  [7:0] d,
    output [7:0] q
);
always @(posedge clk or posedge areset) begin
	if (areset) begin
		q <= 'd0;
	end
	else begin
		q <= d;
	end
end

endmodule

Dff16e

创建 16 D 触发器。有时,仅修改一组触发器的一部分是很有用的。字节使能输入控制在该周期内是否应写入 16 个寄存器中的每个字节。byteena[1] 控制上字节 d[15:8],而 byteena[0] 控制下字节 d[7:0]。复位是同步、低电平有效复位。所有 DFF 都应由 clk 的正边缘触发。

module top_module (
    input          clk,
    input          resetn,
    input  [1:0]   byteena,
    input  [15:0]  d,
    output [15:0]  q
);
always @(posedge clk) begin
	if (!resetn) begin
		q <= 'd0;
	end
	else if (byteena==2'b11) begin
		q <= d;
	end
	else if (byteena==2'b10) begin
		q[15:8] <= d[15:8];
	end
	else if (byteena==2'b01) begin
		q[7:0] <= d[7:0];
	end
end

endmodule

D Latch

创建锁存器

module top_module (
    input    d, 
    input    ena,
    output   q
);

always @(*) begin
	if (ena) begin
		q = d;
	end
end

endmodule

DFF1

异步复位

module top_module (
    input   clk,
    input   d, 
    input   ar,   
    output  q
);
always @(posedge clk or posedge ar) begin
	if (ar) begin
		q <= 'd0;
	end
	else begin
		q <= d;
	end
end

endmodule

DFF2

同步复位

module top_module (
    input   clk,
    input   d, 
    input   r,   
    output  q
);
always @(posedge clk) begin
	if (r) begin
		q <= 'd0;
	end
	else begin
		q <= d;
	end
end

endmodule

DFF gate

根据电路图实现 Verilog 逻辑

0a9ba296814b46ec8ef1d9810c645dfe.png

module top_module (
    input   clk,
    input   in, 
    output  out
);
wire    a;

assign a = in ^ out;
always @(posedge clk) begin
	out <= a;
end

endmodule

Mux and DFF1

假设要为此电路实现分层 Verilog 代码,使用子模块的三个实例化,该子模块中包含触发器和多路复用器。为此子模块编写一个名为 top_module 的 Verilog 模块(包含一个触发器和多路复用器)。

485ed2c99c88474c842a583cd09338dc.png

module top_module (
	input       clk,
	input       L,
	input       r_in,
	input       q_in,
	output reg  Q
);
wire     D;
assign D = L?r_in:q_in;
always @(posedge clk) begin
	Q <= D;
end
endmodule

Mux and DFF2

为该电路的一级编写一个名为top_module的Verilog模块,包括触发器和多路复用器。

14637b5cae6248b5a6f66f445c13abd4.png

module top_module (
    input   clk,
    input   w, R, E, L,
    output  Q
);
wire     C,D;
assign C = E?w:Q;
assign D = L?R:C;
always @(posedge clk) begin
	Q <= D;
end

endmodule

DFFs and gates

给定如图所示的有限状态机电路,假设D触发器在机器开始之前最初复位为零。

d35f46c42977405bbba64e1733bf23d8.png

module top_module (
    input    clk,
    input    x,
    output   z
); 
reg    Q1,Q2,Q3;
wire   D1,D2,D3;

assign D1 = x ^ Q1;
assign D2 = x & (~Q2);
assign D3 = x | (~Q3);

always @(posedge clk) begin
	Q1 <= D1;
end

always @(posedge clk) begin
	Q2 <= D2;
end

always @(posedge clk) begin
	Q3 <= D3;
end

assign z = ~(Q1 | Q2 | Q3);

endmodule

creat circuit

实现 JK 触发器,真值表如下:

fb56d3311ce14c9da53d8ca4c88915e1.png

module top_module (
    input   clk,
    input   j,
    input   k,
    output  Q
); 
always @(posedge clk) begin
	if (~j & ~k) begin
		Q <= Q;
	end
	else if (~j & k) begin
		Q <= 'd0;
	end
	else if (j & ~k) begin
		Q <= 'd1;
	end
	else if (j & k) begin
		Q <= ~Q;
	end
end

endmodule

Edgedetect

上升沿检测:对输入信号打一拍,打一拍的信号取反与原信号相与就可以检测出上升沿
上升沿检测:对输入信号打一拍,打一拍的信号与原信号取反相与就可以检测出上升沿

1ee3ec52693e41dea440f5a6018b6ebc.png 

module top_module (
    input         clk,
    input  [7:0]  in,
    output [7:0]  pedge
);
reg [7:0]  in_reg;
always @(posedge clk) begin
	in_reg <= in;
end
always @(posedge clk) begin
	pedge <= in & (~in_reg);
end
endmodule

Edgedetect2

对于 8 位矢量中的每个位,检测输入信号何时从一个时钟周期变为下一个时钟周期(检测任何边沿)。输出位应在0到1转换发生后设置周期。

e06bc84f4f134b3a8c791a881ce7f491.png

module top_module (
    input         clk,
    input  [7:0]  in,
    output [7:0]  anyedge
);
reg [7:0]  in_reg;
always @(posedge clk) begin
	in_reg <= in;
end
always @(posedge clk) begin
	anyedge <= in ^ in_reg;
end
endmodule

Edgecapture

对于 32 位矢量中的每个位,当输入信号在一个时钟周期内从 1 变为下一个时钟周期中的 0 时进行捕获。“捕获”意味着输出将保持1,直到寄存器复位(同步复位)。每个输出位的行为类似于SR触发器:输出位应设置为(至1)1,转换发生1至0后的周期。当复位为高电平时,输出位应在正时钟边沿复位(至0)。如果上述两个事件同时发生,则重置优先。在下面示例波形的最后4个周期中,“复位”事件发生比“set”事件早一个周期,因此这里没有冲突。

9fad9e7f868848d38f39c140ff45cbfd.png

module top_module (
    input          clk,
    input          reset,
    input  [31:0]  in,
    output [31:0]  out
);
reg [31:0]  in_reg;

always @(posedge clk) begin
	in_reg <= in;
end

always @(posedge clk) begin
	if (reset) begin
		out <= 'd0;
	end
	else begin
		out <= ~in & in_reg | out;
	end
end

endmodule

Dualedge

熟悉在时钟的上升沿或时钟的下降沿触发的。双边沿触发触发器在时钟的两个边沿触发。但是,FPGA没有双边触发触发器,并且@(posedge clk or negedge clk)是不能够被综合的。构建一个在功能上表现得像双边沿触发触发器的电路:

4ba4d52a90854acb8802c75a65511a78.png

 以下提供两种方法:

module top_module (
    input   clk,
    input   d,
    output  q
);
reg   d1,d2;
always @(posedge clk) begin
	d1 <= d;
end
always @(negedge clk) begin
	d2 <= d;
end
assign q = clk?d1:d2;

endmodule

//second
module top_module (
    input   clk,
    input   d,
    output  q
);
reg   q1,q2;
always @(posedge clk) begin
	q1 <= d ^ q2;
end
always @(negedge clk) begin
	q2 <= d ^ q1;
end
assign q = q1 ^ q2;

endmodule

总结

这部分的内容比较简单,主要就是学习了创建触发器和锁存器,以及在实际设计中常用的边沿检测。

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【HDLBits 刷题 6】Circuits(2)Sequential Logic---Latches and Filp Flops 的相关文章

  • 带有always_comb结构的Systemverilog问题

    我对这个 SystemVerilog 代码有疑问 这是代码 module mult multiplicand multiplier Product clk clear Startm endm input 31 0 multiplicand
  • 分治—快速选择算法

    文章目录 215 数组中的第K个最大元素 1 题目 2 算法原理 3 代码实现 LCR 159 库存管理 III
  • 如何在 verilog 中不使用 while() 循环(用于综合)?

    我已经养成了开发大量测试平台并使用 for 和 while 循环进行测试的习惯 没关系 问题是我已经将这种习惯用于对应该可综合的电路进行编码 XST等拒绝合成代码 无需对合成参数进行额外修改 例如 while num lt test num
  • Verilog、FPGA、统一寄存器的使用

    我有一个问题 关于我正在开发的 AGC SPI 控制器在我看来奇怪的行为 它是用 Verilog 完成的 针对的是 Xilinx Spartan 3e FPGA 该控制器是一个依赖外部输入来启动的 FSM FSM的状态存储在状态寄存器它没有
  • EDAplayground 中不显示时钟波形

    当尝试在 EDA Playground 中显示时钟波形时 出现错误 执行中断或达到最大运行时间 如何显示波形 EDA Playground 上的代码 module test reg clk initial begin dumpfile du
  • Verilog 最佳实践 - 递增变量

    我绝不是 Verilog 专家 我想知道是否有人知道这些增加值的方法中哪一种更好 抱歉 如果这个问题太简单了 Way A 在组合逻辑块中 可能在状态机中 some condition count next count 1 然后在一个连续块中
  • Matlab图像处理系列——图像复原之噪声模型仿真

    微信公众号上线 搜索公众号 小灰灰的FPGA 关注可获取相关源码 定期更新有关FPGA的项目以及开源项目源码 包括但不限于各类检测芯片驱动 低速接口驱动 高速接口驱动 数据信号处理 图像处理以及AXI总线等 本节目录 一 图像复原的模型 二
  • Matlab图像处理系列——图像复原之噪声模型仿真

    微信公众号上线 搜索公众号 小灰灰的FPGA 关注可获取相关源码 定期更新有关FPGA的项目以及开源项目源码 包括但不限于各类检测芯片驱动 低速接口驱动 高速接口驱动 数据信号处理 图像处理以及AXI总线等 本节目录 一 图像复原的模型 二
  • Verilog 错误:必须连接到结构网络表达式

    我收到错误 output or inout port Qout must be connected to a structural net expression 我评论了下面代码中发生错误的行 代码被修剪 压缩 我搜索了答案 似乎我无法将输
  • DSCA190V 57310001-PK

    DSCA190V 57310001 PK DSCA190V 57310001 PK 具有两个可编程继电器功能 并安装在坚固的 XP 外壳中 DSCA190V 57310001 PK 即可使用 只需最少的最终用户校准 DSCA190V 573
  • 在verilog中将wire值转换为整数

    我想将电线中的数据转换为整数 例如 wire 2 0 w 3 b101 我想要一个将其转换为 5 并将其存储在整数中的方法 我怎样才能以比这更好的方式做到这一点 j 1 for i 0 i lt 2 i i 1 begin a a w i
  • 如何使用 don't cares 参数化 case 语句?

    我有一条称为输入的电线 我想检测前导的数量 我正在尝试创建一个模块 该模块使用下面的 case 语句根据前导零的数量更改输出数据 然而 输入的大小是可参数化的 如果 X 是固定值 4 我将创建一个 case 语句 case input 4
  • 我们可以在 C 或 SystemVerilog 中使用 ifdef MACROS 中的条件吗?

    我想要那样的东西 ifdef N O gt N I define GREATER 1 else define LESSER 1 endif 但做不到 有什么解决方案或阅读吗 我很努力地想要做到这一点 但是却做不到 Verilog 不提供这样
  • 在 Mac OS X 10.6.8 上用什么来编译和模拟 Verilog 程序?

    作为教学大纲的一部分 我需要模拟 Verilog 程序 但是 我的大学使用 Xilinx ISE 但它不适用于 Mac 因此 请帮助我提供最好的软件以及有关如何安装和使用它们的一些详细步骤 你可以尝试伊卡洛斯 Verilog http iv
  • 对象 <名称> 未声明

    这是我的代码 据我所知 LEDs被定义为 module sevenseg LEDs in output reg 6 0 LEDs input 3 0 in always in begin case in 0 LEDs 7 b1000000
  • 标识符必须用端口模式声明:busy。 (Verilog)

    我有如下所示的 Verilog 代码 当我编译它时 我收到以下错误消息 并且代码的第一行突出显示 Error 标识符必须用端口模式声明 busy Code module main clk rst start busy ready cnt s
  • 具有 +1 逻辑的 4 位计数器 D 触发器

    我正在尝试通过 Verilog 实现带有 1 逻辑的 D 触发器计数器 但是我收到了很多有关网络多个常量驱动程序的错误代码 有人可以帮我吗 这是到目前为止的代码 module LAB clk clear Enable Q input clk
  • Verilog 双向握手示例

    我正在完成一个项目 要求是处理器内部功能单元之间的双向握手 我知道它是什么 但是有没有任何 标准 或一个简单的例子 我唯一能想到的就是两个单元之间 当它们之间有一条数据线并且当 X 发送到 Y 时 会给出一个单独的 发送 信号 当 Y 接收
  • 学习 Verilog 的资源 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我是 Verilog 新手 有人可以推荐学习资源 书籍 视频 博客或任何他们有良好个人经验并帮助他们更
  • \add_34/U1_1_6 的 Verilog 命名约定

    有人可以解释一下这个命名约定在下面的 Verilog 行中意味着什么吗 我不知道这是什么 add 34 部分的意思是 ADDHXL add 34 U1 1 6 A n1022 B add 34 carry 6 CO add 34 carry

随机推荐

  • 目标检测:锚点介绍及应用

    目标检测 锚点介绍及应用 介绍 应用 生成锚点图 步骤 锚点匹配 步骤 介绍 锚点相当于在待预测的特征数据上预设出可能的物体边界框 即预设出特征数据可能代表的物体区域 每个区域通常由两个属性构成 尺度 scale或size 和比例 rati
  • laravel实战项目搭建及代码管理

    本文目录 前言 一 安装laravel和装插件 1 1 安装laravel 1 2 安装开发插件 二 运行项目及配置 2 1 配置虚拟主机与绑定hosts文件 2 2 配置数据库连接 2 3 本地化配置 2 4 删除默认文件或目录 三 gi
  • 算法训练Day11

    目录 LeetCode232 用栈实现队列 1 思路 2 代码实现 3 复杂度分析 4 思考 LeetCode225 用队列实现栈 1 思路 2 代码实现 3 复杂度分析 4 思考 LeetCode20 有效的括号 方法一 使用栈和字典 1
  • Ubuntu18配置ssh免密登录

    安装配置 sudo apt get install openssh server cd ssh 若没有该目录 请先执行一次 ssh localhost ssh keygen t rsa 会有提示 都按回车就可以 cat id rsa pub
  • JSON注入与CSRF漏洞原理与复现

    JSON注入与CSRF漏洞原理与复现 1 JSON JavaScript Object Notation JavaScript对象表示法 2 它是一种数据格式 而不是一种编程语言 3 JSON的语法 有三种类型的值 简单值 对象 数组 关于
  • 【深度学习】 Python 和 NumPy 系列教程(十六):Matplotlib详解:2、3d绘图类型(2)3D散点图(3D Scatter Plot)

    目录 一 前言 二 实验环境 三 Matplotlib详解 1 2d绘图类型 2 3d绘图类型 0 设置中文字体 1 线框图 Wireframe Plot 2 3D散点图 3D Scatter Plot 一 前言 Python是一种高级编程
  • Qt for Android——关于版本的选择(ABI和CPU版本)

    1 前景介绍 之前在开发Qt for Android程序的时候 不知道如何选择套件的版本 乱选一通 经常是程序开发完 到了运行选择设备的时候告诉我设备不匹配 不支持这个ABI 下面就来讲讲这些版本 2 Qt中套件对应的版本 在我们安装Qt的
  • JTest

    接到parasoft公司一位先生打来的电话 说下个月第二周到上海来 希望顺便给我们组培训一下JTest和C Test的使用 我是用java的 自然对JTest更感兴趣一些 上网一搜 原来JTest这么出名 自己的确孤陋寡闻了 看了一下价格
  • 如何下载微信支付证书(API证书)

    一 登录微信商户平台 1 商户平台登陆网址 微信支付 中国领先的第三方支付平台 微信支付提供安全快捷的支付方式http pay weixin qq com 2 登录方式 扫码登录登录 二 进入微信商户平台下载证书 1 点击账户中心 账户设置
  • Vue简易登陆页面

    目录 1 效果展示 2 Vue代码 3 存点图片 1 效果展示 2 Vue代码
  • selenium练习实例

    1 项目流程 2 中心调度 中心调度 defmain try total search total int re compile d search total group 1 fori inrange 2 total 1 next page
  • 一分钟解决Chrome浏览器主页被hao123、360和2345篡改简单有效方法

    当你打开浏览器看到各种首页跳转的页面 对于强迫症的我是不能接受的 各种情况都碰到了 现在给出解决方法 按照下面的方式去排查就可以一定能解决你的问题 如果不行的话你来打我呀 如果问题解决了希望你能推荐给其他人 提示 检查下杀毒软件有没有绑定浏
  • Raft一致性算法分析与总结

    Raft简介 Raft是一个用于日志复制 同步的一致性算法 它提供了和Paxos一样的功能和性能 但是它的算法结构与Paxos不同 这使得Raft相比Paxos更好理解 并且更容易构建实际的系统 为了强调可理解性 Raft将一致性算法分解为
  • 跨平台传输结构体的注意事项

    1 什么是跨平台 1 这里的平台是按照CPU的位数来划分 分为32位CPU和64位CPU 不同位数CPU的差异会影响到结构体的解析 2 在实际嵌入式开发中 存在 主芯片 从芯片 的多CPU的产品 或者数据需要在不同位数CPU的机器上传输 3
  • 矩阵乘法——基于GPU的并行编程模型CUDA程序设计

    矩阵乘法 基于GPU的并行编程模型CUDA程序设计 目录 矩阵乘法 基于GPU的并行编程模型CUDA程序设计 1 题目描述 2 设计思路 实验环境 3 源码 3 1 串行程序 3 2 并行程序 3 3 性能对比与分析 1 题目描述 题目1
  • 二分图笔记

    什么是二分图 二分图一般针对无向图问题 一张图中 如果能够把全部的点分到两个集合中 保证两个集合内部没有任何边 图中的边只存在于两个集合之间 即为二分图 判断二分图 1 染色法 即用两种颜色对于这张图进行染色 相邻的结点颜色不同 如果没有矛
  • 结构重参数化之二:RepVGG

    论文 RepVGG Making VGG style ConvNets Great Again 代码 GitHub DingXiaoH RepVGG RepVGG Making VGG style ConvNets Great Again
  • Vue中实现图片下载到本地功能和导出(下载)excel文件功能:

    一 实现图片下载到本地功能 需求 将勾选的列表项的id传给后台 让后台处理并下载对应的图片 1 后台接口 下载图片zip GET download 请求数据类型 application x www form urlencoded 响应数据类
  • 神武3手游微信月礼包服务器,千万红包雨豪礼送不停 《神武3》端手游今日同步上线...

    神武3 双端今日 11月24日 同步上线 公测盛典活动全面开启 新服齐开 还有海量礼包 千万红包雨以及神兽 iPAD等各种大礼等你来拿 神武3 今日公测 公测新服齐开 千万红包雨来袭 神武3 端游 手游今日同步上线之际 新服齐开 其中 端游
  • 【HDLBits 刷题 6】Circuits(2)Sequential Logic---Latches and Filp Flops

    目录 写在前面 Latches and Filp Flops Dff Dff8 Dff8r Dff8p Dff8ar Dff16e D Latch DFF1 DFF2 DFF gate Mux and DFF1 Mux and DFF2 D