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

这篇具有很好参考价值的文章主要介绍了【HDLBits 刷题 6】Circuits(2)Sequential Logic---Latches and Filp Flops。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

 文章来源地址https://www.toymoban.com/news/detail-437157.html

写在前面

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 逻辑

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

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 模块(包含一个触发器和多路复用器)。

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

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模块,包括触发器和多路复用器。

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

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触发器在机器开始之前最初复位为零。

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

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 触发器,真值表如下:

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

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

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

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

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转换发生后设置周期。

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

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”事件早一个周期,因此这里没有冲突。

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

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)是不能够被综合的。构建一个在功能上表现得像双边沿触发触发器的电路:

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

 以下提供两种方法:

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

总结

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

 

到了这里,关于【HDLBits 刷题 6】Circuits(2)Sequential Logic---Latches and Filp Flops的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【HDLBits 刷题 5】Circuits(1)Combinational Logic

    目录 写在前面 Combinational Logic Basic Gates Wire GND NOR Another gate Two gates More logic gates 7420 chips Truth table Two bit equality Simple circuit A Simple circuit B Combine circuits A and B Ring or vibrate Thermostat 3 bit population count Gates and vectors Even longer vectors Multiplexers 2 to 1 mux 2 to 1 bus mux 9 to 1 mux 256 to 1 mux 256 t

    2024年02月02日
    浏览(40)
  • HDLBits刷题笔记7:Circuits.Combinational Logic.Karnaugh Map to Circuit

    3-variable 实现如下卡诺图,用sop和pos两种方式 化简: 4-variable 实现如下卡诺图,用sop和pos两种方式 化简: 4-variable 实现如下卡诺图 化简: 4-variable 实现如下卡诺图 此卡诺图不管是sop还是pos都没法化简,但不难看出,输入有奇数个1时,输出为1,所以是异或 minimum SOP and POS 一

    2024年02月11日
    浏览(37)
  • 「HDLBits题解」Latches and Flip-Flops

    本专栏的目的是分享可以通过HDLBits仿真的Verilog代码 以提供参考 各位可同时参考我的代码和官方题解代码 或许会有所收益 题目链接:Dff - HDLBits 题目链接:Dff8 - HDLBits 题目链接:Dff8r - HDLBits 题目链接:Dff8p - HDLBits 题目链接:Dff8ar - HDLBits 题目链接:Dff16e - HDLBits 题目链接:

    2024年01月19日
    浏览(37)
  • verilog 学习笔记 —— 时序逻辑 Sequential Logics (Latches and Flip-Flops 锁存器和触发器)

    1. D flip-flop D触发器 2. D flip-flop  D触发器 3. DFF with reset  带复位的D触发器  4. 带复位值的D触发器 5. DFF with asynchronous reset 带异步复位功能的 D触发器 6. DFF with byte enable   带位启动的触发器 7. D Latch  D锁存器 8. DFF  9. DFF   10. DFF+gate   11. Mux and DFF   12. DFFs and gates   13

    2024年02月04日
    浏览(60)
  • Circuits--Sequential--Registers_1

    1.4-bit shift register 2.Left/right rotator 3.Left / right arithmetic  4.5-bit LFSR

    2024年04月17日
    浏览(30)
  • 【博士每天一篇论文-理论分析】Dynamical systems, attractors, and neural circuits

    阅读时间:2023-11-19 年份:2016 作者:Paul Miller 马萨诸塞州沃尔瑟姆市布兰代斯大学Volen国家复杂系统中心 期刊: F1000Research 引用量:63 这篇论文主要关注神经回路中的动力系统和吸引子。作者指出神经回路的复杂性和所涉及的非线性,加上数据受限和在动力系统领域的有限条

    2024年01月21日
    浏览(52)
  • HDLbits 刷题 -- Alwaysblock2

    学习: For hardware synthesis, there are two types of always blocks that are relevant: Combinational: always @(*) Clocked: always @(posedge clk) Clocked always blocks create a blob of combinational logic just like combinational always blocks, but also creates a set of flip-flops (or \\\"registers\\\") at the output of the blob of combinational logic. Instea

    2024年04月09日
    浏览(41)
  • [ECE] Introduction to Digital Logic and Systems

    This course gives science and engineering students exposure to the basic concepts and techniques in digital logic and system design. Topics include digital system concepts, numbering systems and codes, Boolean algebra, logic gates and logic circuit elements, logic functions and simplification, logic circuits design, latches and flip-flops, counters, register

    2024年01月16日
    浏览(60)
  • Verilog刷题[hdlbits] :Module add

    You are given a module add16 that performs a 16-bit addition. Instantiate two of them to create a 32-bit adder. One add16 module computes the lower 16 bits of the addition result, while the second add16 module computes the upper 16 bits of the result, after receiving the carry-out from the first adder. Your 32-bit adder does not need to handle carry-in (assu

    2024年02月06日
    浏览(45)
  • 【HDLBits 刷题 1】Verilog Language(1)Basics 部分

    目录   写在前面 Basics Simple wire  Four wires  Inverter  AND gate  NOR gate  Declaring wires  7485 chip HDLBits 作为 Verilog 的刷题网站,非常适合初学者拿来练习,不仅可以学到基础的语法,还可以让自己写出的代码更直观,直接映射到电路中,因此在这段时间每周会抽出一点时间来把这个

    2024年02月10日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包