0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Problem 80-89(触发器和锁存器(1))

OpenFPGA 来源:OpenFPGA 作者:OpenFPGA 2022-11-10 10:01 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

HDLBits: 在线学习 SystemVerilog(十四)-Problem 80-89(触发器和锁存器(1))

HDLBits 是一组小型电路设计习题集,使用 Verilog/SystemVerilog 硬件描述语言 (HDL) 练习数字硬件设计~

网址如下:

https://hdlbits.01xz.net/

关于HDLBits的Verilog实现可以查看下面专栏:

https://www.zhihu.com/column/c_1131528588117385216

缩略词索引

  • SV:SystemVerilog

从今天开始新的一章-时序电路,包括触发器、计数器、移位寄存器、状态机等。

今天更新触发器和锁存器,这也是FPGA部分需要了解的基础部分。

触发器和锁存器

触发器全知道

FPGA的设计中为什么避免使用锁存器

Problem 80-Dff

SystemVerilog中程序块的使用

SystemVerilog-程序块 (procedural blocks)

题目说明

D 触发器是一个电路,存储 1bit 数据,并定期地根据触发器的输入(d)更新这 1 bit 数据,更新通常发生在时钟上升沿(clk)。存储的数据会通过输出管脚(q)输出。

1d06180c-6091-11ed-8abf-dac502259ad0.png
图片来自HDLBits

本题要求利用always程序块创建一个D触发器。

模块端口声明

moduletop_module(
inputclk,//Clocksareusedinsequentialcircuits
inputd,
outputregq);

题目解析

moduletop_module(
inputlogicclk,//Clocksareusedinsequentialcircuits
inputlogicd,
outputlogicq);//

//Useaclockedalways_ffblock
//copydtoqateverypositiveedgeofclk
//Clockedalways_ffblocksshouldusenon-blockingassignments

always_ff@(posedgeclk)begin
q<= d ;
    end
endmodule

1d182c04-6091-11ed-8abf-dac502259ad0.png

点击Submit,等待一会就能看到下图结果:

1d27194e-6091-11ed-8abf-dac502259ad0.png

注意图中的Ref是参考波形,Yours是你的代码生成的波形,网站会对比这两个波形,一旦这两者不匹配,仿真结果会变红。

这一题就结束了。

Problem 81-Dff8

题目说明

实现 8 个 D 触发器。

模块端口声明

moduletop_module(
inputclk,
input[7:0]d,
output[7:0]q
);

题目解析

不需要将上面的电路复制八遍,只需将输入输出的位宽提高到八位即可,综合器会帮我们实现我们需要的8个触发器。

moduletop_module(
inputlogicclk,
inputlogic[7:0]d,
outputlogic[7:0]q
);

always_ff@(posedgeclk)begin
q<= d ;
    end
endmodule

1d47aa6a-6091-11ed-8abf-dac502259ad0.png

点击Submit,等待一会就能看到下图结果:

1d551506-6091-11ed-8abf-dac502259ad0.png

注意图中的Ref是参考波形,Yours是你的代码生成的波形,网站会对比这两个波形,一旦这两者不匹配,仿真结果会变红。

这一题就结束了。

Problem 82-Dff8r

题目说明

在上一题基础上加上同步复位电路。

模块端口声明

moduletop_module(
inputclk,
inputreset,//Synchronousreset
input[7:0]d,
output[7:0]q
);

题目解析

这题难度不大,需要我们举一反三:明白同步复位和异步复位。

对于电路中的时序元件,把复位信号受到时钟的控制和复位信号不受时钟的控制两种电路分别称为同步复位电路和异步复位电路。

moduletop_module(
inputlogicclk,
inputlogicreset,//Synchronousreset
inputlogic[7:0]d,
outputlogic[7:0]q
);

always_ff@(posedgeclk)begin
if(reset)q<= '0;
else
q<=  d ;
    end
endmodule


1d7e6032-6091-11ed-8abf-dac502259ad0.png

点击Submit,等待一会就能看到下图结果:

1d98bdf6-6091-11ed-8abf-dac502259ad0.png

在vivado中综合的结果如下:

1fe4eaf8-6091-11ed-8abf-dac502259ad0.png

其中,FDRE:D Flip-Flop with Clock Enable and Synchronous Reset 带使能功能的同步复位D触发器。

注意图中的Ref是参考波形,Yours是你的代码生成的波形,网站会对比这两个波形,一旦这两者不匹配,仿真结果会变红。

这一题就结束了。

Problem 83-Dff8p

题目说明

在上一题同步复位基础上,触发器必须复位时候为 0x34 而不是零。所有 DFF 都应由clk的下降沿触发。

模块端口声明

moduletop_module(
inputclk,
inputreset,
input[7:0]d,
output[7:0]q
);

题目解析

moduletop_module(
inputlogicclk,
inputlogicreset,//Synchronousreset
inputlogic[7:0]d,
outputlogic[7:0]q
);

always_ff@(negedgeclk)begin
if(reset)q<= 8'h34;
else
q<=  d ;
    end
endmodule

200544ce-6091-11ed-8abf-dac502259ad0.png

点击Submit,等待一会就能看到下图结果:

2015ece8-6091-11ed-8abf-dac502259ad0.png

注意图中的Ref是参考波形,Yours是你的代码生成的波形,网站会对比这两个波形,一旦这两者不匹配,仿真结果会变红。

这一题就结束了。

Problem 84-Dff8ar

题目说明

本题中的触发器引入了异步复位。当异步复位端有效时,触发器的输出复位为 0 。

模块端口声明

moduletop_module(
inputclk,
inputareset,//activehighasynchronousreset
input[7:0]d,
output[7:0]q
);

题目解析

moduletop_module(
inputlogicclk,
inputlogicareset,//activehighasynchronousreset
inputlogic[7:0]d,
outputlogic[7:0]q
);
always_ff@(posedgeclkorposedgeareset)begin
if(areset)q<= '0;
else
q<=  d ;
    end

endmodule
20556396-6091-11ed-8abf-dac502259ad0.png

点击Submit,等待一会就能看到下图结果:

207464b2-6091-11ed-8abf-dac502259ad0.png

注意图中的Ref是参考波形,Yours是你的代码生成的波形,网站会对比这两个波形,一旦这两者不匹配,仿真结果会变红。

下图是Vivado中综合的结果:

209a1784-6091-11ed-8abf-dac502259ad0.png

FDC :: D Flip-Flop with Asynchronous Clear 带异步清除D触发器;FDCE:D Flip-Flop with Clock Enable and AsynchronousReset 带使能功能的异步清除D触发器,相比与FDRE将同步复位变化成异步复位,当同步复位接口为高电平时,直接触发寄存器复位(置0)。

这一题就结束了。

Problem 85-Dff16e

题目说明

创建一个 16 路 D触发器。部分情况下,只需要多路触发器中的一部分触发器工作,此时可以通过 ena 使能端进行控制。使能端 ena 信号有效时,触发器在时钟上升沿工作。

byteena 使能信号以 byte 为单位管理 8 路触发器在时钟边沿触发与否。byteena [1] 作为 d[15:8] 高位字节的使能端,byteena [0] 则控制 d 的低位字节。

resetn 为同步,低电平有效复位信号。

模块端口声明

moduletop_module(
inputclk,
inputresetn,
input[1:0]byteena,
input[15:0]d,
output[15:0]q
);

题目解析

moduletop_module(
inputlogicclk,
inputlogicresetn,
inputlogic[1:0]byteena,
inputlogic[15:0]d,
outputlogic[15:0]q
);

always_ff@(posedgeclk)begin
if(!resetn)q<= '0;
elsebegin
case(byteena)
2'b01:
q<= {q[15:8], d[7:0]};
                2'b10:
q<= {d[15:8], q[7:0]};
                2'b11:
q<= d;
                2'b00:
q<= q;
            endcase
        end
    end
endmodule


20b73e86-6091-11ed-8abf-dac502259ad0.png

点击Submit,等待一会就能看到下图结果:

20d72660-6091-11ed-8abf-dac502259ad0.png

注意图中的Ref是参考波形,Yours是你的代码生成的波形,网站会对比这两个波形,一旦这两者不匹配,仿真结果会变红。

这一题就结束了。

Problem 86-m2014 q4a

题目说明

实现一个如下的电路:

214d5a74-6091-11ed-8abf-dac502259ad0.png
图片来自HDLBits

从看到图片上的电路就应该认出这个基本元器件-锁存器,同D触发器对比这个元件没有 clk 端口,取而代之的是 ena 端口。

1d06180c-6091-11ed-8abf-dac502259ad0.png
图片来自HDLBits-D触发器

锁存器的特征在于,相较于 D触发器的触发事件发生于 clk 时钟的边沿,锁存器锁存的触发事件发生于使能端 ena 的电平。

模块端口声明

moduletop_module(
inputd,
inputena,
outputq);

题目解析

moduletop_module(
inputlogicd,
inputlogicena,
outputlogicq);

always_latchbegin
if(ena)q<= d ;
        else
q<= q ;
    end
endmodule



从上面的代码可以看出,SV在硬件描述过程中比Verilog代码可读性高很多,一眼就能看出这个电路的功能,而Verilog需要根据描述的功能推测电路功能。

2166bd66-6091-11ed-8abf-dac502259ad0.png

点击Submit,等待一会就能看到下图结果:

2180ae60-6091-11ed-8abf-dac502259ad0.png

注意图中无波形。但是注意图中的警告,这个在实际使用中非常重要,锁存器相比触发器会消耗更多的资源,所以综合器会在推断出锁存器时产生提醒,防止开发者在不想使用锁存器时,因为代码风格等原因误产生了锁存器。

这一题就结束了。

Problem 87-m2014_q4b

题目说明

实现一个如下的电路:

21af6aca-6091-11ed-8abf-dac502259ad0.png
图片来自HDLBits

模块端口声明

moduletop_module(
inputclk,
inputd,
inputar,//asynchronousreset
outputq);

题目解析

AR 代表 asynchronous reset,所以这是一个带有异步复位的 D 触发器。

图中的三角形代表时钟,不再用 CLK 标出。

moduletop_module(
inputlogicclk,
inputlogicd,
inputlogicar,//asynchronousreset
outputlogicq);

always_ff@(posedgeclkorposedgear)begin
if(ar)q<= '0;
else
q<=  d ;
    end
endmodule

21c3003a-6091-11ed-8abf-dac502259ad0.png

点击Submit,等待一会就能看到下图结果:

21e58c86-6091-11ed-8abf-dac502259ad0.png

注意图中无波形。

这一题就结束了。

Problem 88-m2014_q4c

题目说明

实现一个如下的电路:

22059558-6091-11ed-8abf-dac502259ad0.png
图片来自HDLBits

模块端口声明

moduletop_module(
inputclk,
inputd,
inputr,//synchronousreset
outputq);

题目解析

R 代表 synchronous reset。所以这是一个同步复位的D触发器。

moduletop_module(
inputlogicclk,
inputlogicd,
inputlogicr,//synchronousreset
outputlogicq);

always_ff@(posedgeclk)begin
if(r)q<= '0;
else
q<=  d ;
    end
endmodule

221b78d2-6091-11ed-8abf-dac502259ad0.png

点击Submit,等待一会就能看到下图结果:

222fecf4-6091-11ed-8abf-dac502259ad0.png

注意图中无波形。

这一题就结束了。

Problem 89-m2014_q4d

题目说明

实现一个如下的电路:

230193e4-6091-11ed-8abf-dac502259ad0.png
图片来自HDLBits

模块端口声明

moduletop_module(
inputclk,
inputin,
outputout);

题目解析

触发器的输出 q 和输入信号 in 一起作为异或门的输入。

moduletop_module(
inputlogicclk,
inputlogicin,
outputlogicout);

varlogicd;

always_combbegin
d=out^in;
end

always_ff@(posedgeclk)begin
out<= d ;
    end

endmodule

230fd6b6-6091-11ed-8abf-dac502259ad0.png

点击Submit,等待一会就能看到下图结果:

23348628-6091-11ed-8abf-dac502259ad0.png

注意图中无波形。

这一题就结束了。

总结

今天的几道题就结束了,对于理解触发器的非常有帮助,尤其同步复位、异步复位及锁存器的理解非常有帮助,对于这些简单的代码,建议放到实际的EDA工具中跑下综合,查看一下FPGA具体的实现元器件是什么样,这样在后期自己设计代码时候的理解很有帮助。

最后我这边做题的代码也是个人理解使用,有错误欢迎大家批评指正,祝大家学习愉快~

代码链接:

https://github.com/suisuisi/SystemVerilog/tree/main/SystemVerilogHDLBits


审核编辑 :李倩


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 锁存器
    +关注

    关注

    8

    文章

    958

    浏览量

    45533
  • 触发器
    +关注

    关注

    14

    文章

    2065

    浏览量

    63629
  • 代码
    +关注

    关注

    30

    文章

    4983

    浏览量

    74543

原文标题:总结

文章出处:【微信号:Open_FPGA,微信公众号:OpenFPGA】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    74AUP1G74XXDO8G:低功耗单D型正边沿触发触发器深度解析

    74AUP1G74XXDO8G:低功耗单D型正边沿触发触发器深度解析 作为一名电子工程师,在设计中选择合适的触发器至关重要。今天就来详细剖析74AUP
    的头像 发表于 03-16 11:45 670次阅读

    74LVC1G17 单施密特触发器缓冲:特性、应用与设计要点

    74LVC1G17 单施密特触发器缓冲:特性、应用与设计要点 一、引言 在电子设计领域,单施密特触发器缓冲是一种常见且重要的元件。SG
    的头像 发表于 03-16 09:10 311次阅读

    74LVC1G14单施密特触发器反相:设计与应用的理想之选

    74LVC1G14单施密特触发器反相:设计与应用的理想之选 在电子设计领域,选择合适的器件对于实现高效、稳定的电路至关重要。今天,我们就来深入探讨SGMICRO的74LVC1G14单
    的头像 发表于 03-13 17:30 886次阅读

    74LVC74:双D型正边沿触发触发器的深度解析

    74LVC74:双D型正边沿触发触发器的深度解析 在电子设计领域,触发器是数字电路中不可或缺的基本元件,它能够存储一位二进制数据,在时序逻辑电路中发挥着关键作用。今天我们要深入探讨的是SGMICRO
    的头像 发表于 03-13 16:00 658次阅读

    74LVC1G74:单D型正边缘触发触发器的卓越之选

    74LVC1G74:单D型正边缘触发触发器的卓越之选 电子工程师在设计电路时,常常需要寻找性能可靠、功能丰富的触发器来满足各种应用需求。今天,我们就来深入了解一下SGMICRO的74L
    的头像 发表于 03-13 15:30 586次阅读

    74HC373:8位D型透明的详细解析

    74HC373:8位D型透明的详细解析 在电子设计领域,是一种常见且重要的器件。今天
    的头像 发表于 03-13 14:20 479次阅读

    中的时间借用概念与静态时序分析

    对于基于的设计,静态时序分析会应用一个称为时间借用的概念。本篇博文解释了时间借用的概念,若您的设计中包含
    的头像 发表于 12-31 15:25 5735次阅读
    <b class='flag-5'>锁</b><b class='flag-5'>存</b><b class='flag-5'>器</b>中的时间借用概念与静态时序分析

    SN74HCS574QPWRQ1 8 通道 D 型触发器

    SN74HCS574QPWRQ18通道D型触发器产品型号:SN74HCS574QPWRQ1产品品牌:TI/德州仪器产品封装:TSSOP20产品功能:8通道D型触发器SN74HCS574QPWRQ
    的头像 发表于 12-31 11:47 1420次阅读
    SN74HCS574QPWRQ<b class='flag-5'>1</b>   8 通道 D 型<b class='flag-5'>触发器</b>

    ‌SN74HCS373 Octal透明技术解析与应用指南

    Texas Instruments SN74HCS373/SN74HCS373-Q1八路透明D类包含八个D类
    的头像 发表于 09-24 10:40 1141次阅读
    ‌SN74HCS373 Octal透明<b class='flag-5'>锁</b><b class='flag-5'>存</b><b class='flag-5'>器</b>技术解析与应用指南

    ‌TLC59212 8位开漏输出驱动芯片技术文档总结

    TLC59212器件是一款8位集电极开路驱动,带,设计用于5V V~CC~操作。 这些电路是正边沿触发的 D 型
    的头像 发表于 09-03 09:46 940次阅读
    ‌TLC59212 8位开漏输出<b class='flag-5'>锁</b><b class='flag-5'>存</b>驱动芯片技术文档总结

    高速施密特触发器密封光耦合 skyworksinc

    电子发烧友网为你提供()高速施密特触发器密封光耦合相关产品参数、数据手册,更有高速施密特触发器密封光耦合的引脚图、接线图、封装手册、中文资料、英文资料,高速施密特
    发表于 07-09 18:31
    高速施密特<b class='flag-5'>触发器</b>密封光耦合<b class='flag-5'>器</b> skyworksinc

    密封表面贴装、高速施密特触发器光耦合 skyworksinc

    电子发烧友网为你提供()密封表面贴装、高速施密特触发器光耦合相关产品参数、数据手册,更有密封表面贴装、高速施密特触发器光耦合的引脚图、接线图、封装手册、中文资料、英文资料,密封表面
    发表于 07-04 18:37
    密封表面贴装、高速施密特<b class='flag-5'>触发器</b>光耦合<b class='flag-5'>器</b> skyworksinc

    用于混合组装的微型高速施密特触发器光耦合 skyworksinc

    电子发烧友网为你提供()用于混合组装的微型高速施密特触发器光耦合相关产品参数、数据手册,更有用于混合组装的微型高速施密特触发器光耦合的引脚图、接线图、封装手册、中文资料、英文资料,
    发表于 07-03 18:34
    用于混合组装的微型高速施密特<b class='flag-5'>触发器</b>光耦合<b class='flag-5'>器</b> skyworksinc

    一文读懂Allegro先进磁性开关和

    Allegro 拥有丰富的霍尔效应和隧道磁阻(TMR)开关及产品,可广泛应用于汽车、工业和消费电子等领域。本应用笔记旨在提供分步选型流程,协助设计师为具体应用场景选择适配的 Allegro
    的头像 发表于 06-12 17:26 2224次阅读
    一文读懂Allegro先进磁性开关和<b class='flag-5'>锁</b><b class='flag-5'>存</b><b class='flag-5'>器</b>

    施密特触发器光耦特性

    施密特触发光电耦合(SchmittTriggerOptocoupler)是一种结合了光耦隔离与施密特触发特性的器件,晶台光电推出的KLH11LX系列(如KLH11L1/L2/L3)正
    的头像 发表于 06-12 10:52 1543次阅读
    施密特<b class='flag-5'>触发器</b>光耦特性