【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 的相关文章

  • 模加法器输出显示没有变化

    输出波形显示无变化sum dif burrow and out 即使增加延迟时间后 输出仍然没有变化 这应该像 mod 加法器一样工作 如加 10 和 2 并且 mod 3 给出输出零 CODE module Mod adder a b p
  • Verilog HDL ?操作员

    什么是 用 Verilog 做什么 例如 以下命令是什么意思 input first din input 7 0 din output 127 0 parity reg 127 0 parity wire 7 0 feedback assi
  • 简单赋值时不输出期望值

    当我将一些值分配给具有四位的变量时 当我简单地输出该值时 我会得到意想不到的结果 我以前从未见过这个 想知道我是否在语法上做错了什么 module main reg 3 0 x initial begin monitor b x x 001
  • 硬核 | 从零制作一个激光雷达需要多久?

    编辑 ADS智库 点击下方 卡片 关注 自动驾驶之心 公众号 ADAS巨卷干货 即可获取 点击进入 自动驾驶之心 硬件交流 技术交流群 本文只做学术分享 如有侵权 联系删文 激光雷达 LiDAR 是激光探测及测距系统的简称 目前广泛应用在无
  • Verilog 中总是后面跟着 #(...) pound 是什么意思?

    在一个简单的时钟生成器示例中 我看到以下代码 always cycle 2 clk clk 我以前总是见过 但没见过井号 我试图在文档中找到它 但我所能找到的只是一些对 实值端口 的引用 没有进一步的阐述 这是一个延迟操作 它本质上只是读取
  • 信号连接到以下多个驱动器

    我尝试运行以下命令并收到此错误 这是 Verilog 代码 module needle input referrence input penalty output index 7 0 inout input itemsets input r
  • 如何生成异步复位verilog总是阻塞凿子

    Chisel 始终生成敏感度列表中仅包含时钟的块 always posedge clk begin end 是否可以将模块配置为使用异步重置并生成这样的始终块 always posedge clk or posedge reset begi
  • Matlab图像处理系列——图像复原之噪声模型仿真

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

    微信公众号上线 搜索公众号 小灰灰的FPGA 关注可获取相关源码 定期更新有关FPGA的项目以及开源项目源码 包括但不限于各类检测芯片驱动 低速接口驱动 高速接口驱动 数据信号处理 图像处理以及AXI总线等 本节目录 一 图像复原的模型 二
  • 使用双寄存器方法解决亚稳态问题

    为了解决Verilog中不同时钟域引起的亚稳态 采用双寄存器方法 但据我所知 亚稳态的最终输出尚未确定 输出独立于输入 那么 我的问题是如何保证使用双寄存器方法输出的正确性 Thanks 您不能完全确定您避免了亚稳态 正如您所提到的 亚稳态
  • 从测试台访问 uvm_config_db 的最佳方式?

    我想在我的顶级测试平台中创建一个时钟 其周期可以通过测试进行控制 我所做的是将周期设置到 uvm config db 中并将其返回到测试台中 我必须输入 1 以确保构建阶段已完成 否则 get 返回错误值 module testbench
  • 如何将时钟门映射到技术库单元

    我的设计中有以下时钟门 module my clkgate clko clki ena Clock gating latch triggered on the rising clki edge input clki input ena ou
  • Verilog 中的“net”代表什么?

    我刚刚开始学习Verilog 据我了解 Verilog有net数据类型 什么是net代表 网络就是这样一种数据类型 您不使用它来存储值 它们代表物理连接 您可以将线路视为一种网络数据类型 你可以去网上看看更多here http www ee
  • 向左旋转 verilog 大小写

    我的任务是用verilog编写一个16位ALU 当我做需要旋转操作数和进行2的补码加法和减法的部分时 我发现了困难 我知道如何用纸和铅笔解决这个问题 但我无法弄清楚如何在 Verilog 中做到这一点 例如 A表示为a15 a14 a13
  • FPGA大输入数据

    我正在尝试向 FPGA 发送 4 KB 字符串 最简单的方法是什么 是我正在使用的fpga的链接 我正在使用 Verilog 和 Quartus 您的问题的答案在很大程度上取决于将数据输入 FPGA 的内容 即使没有您需要遵守的特定协议 S
  • 为什么 Verilog 不被视为编程语言? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 教授在课堂上说学生不应该说他们学会了用Verilog 编程 他说 Verilog 之类的东西不是用来编程的 而是用来设计的 那么 Verilog
  • Verilog 中的 If 语句和分配连线

    我试图弄清楚基于组合逻辑分配电线的基础知识 I have wire val wire x wire a wire b always begin if val 00 I want to assign x a if val 01 I want
  • verilog 中的案例陈述

    我遇到了优先级编码器设计 并找到了一种使用 case 语句来实现它的新方法 唯一令人困惑的是 case语句是否优先考虑case 例子 case 1 b1 A 3 Y lt 4 b1000 A 2 Y lt 4 b0100 A 1 Y lt
  • 如何修复实例上的错误:未定义的变量 B?

    我想编译此 Verilog 代码 但在实例中出现错误B模块中的MultiP module error 1 Undefined variable B error 2 near Adder1 syntax error unexpected ID
  • 为什么我们在FGPA / VHDL / VIVADO中使用REG?

    我正在使用 Xilinx 的 vivado 在 verilog 中进行编程 我想知道为什么我们使用某些输出reg 例如reg 3 0 encoder output我们使用它是因为我们的 16 到 4 编码器有 4 个输出 对吧 我假设我们使

随机推荐

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

    目标检测 锚点介绍及应用 介绍 应用 生成锚点图 步骤 锚点匹配 步骤 介绍 锚点相当于在待预测的特征数据上预设出可能的物体边界框 即预设出特征数据可能代表的物体区域 每个区域通常由两个属性构成 尺度 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