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

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

3天内不再提示

写出一个包含触发器和多路选择器的子模块

OpenFPGA 来源:OpenFPGA 作者:碎碎思 2022-11-17 09:37 次阅读

题目说明

考虑下面的时序电路:

4ef54598-6610-11ed-8abf-dac502259ad0.png

图片来自HDLBits

我们用3个包含触发器和多路选择器的子模块来实现图中电路。题目要求我们写出包含一个触发器和一个多路选择器的子模块。

模块端口声明

moduletop_module(
inputclk,
inputL,
inputr_in,
inputq_in,
outputregQ);

题目解析

题目只要求我们写出包含一个触发器和一个多路选择器的子模块,所以不需要看整张图片,看图片前部分即可。

4f02981a-6610-11ed-8abf-dac502259ad0.png

moduletop_module(
inputlogicclk,
inputlogicL,
inputlogicr_in,
inputlogicq_in,
outputlogicQ);

always_ff@(posedgeclk)begin
if(L)Q<= r_in ;
        else  Q <= q_in ;
    end
endmodule


4f22d63e-6610-11ed-8abf-dac502259ad0.png

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

4f458512-6610-11ed-8abf-dac502259ad0.png

注意图中无参考波形。

这一题就结束了。

Problem 91-2014_q4a

题目说明

考虑如下所示 的n位移位寄存器电路:

4f81b2da-6610-11ed-8abf-dac502259ad0.png

图片来自HDLBits

如上图所示,还是实现包含选择器和触发器的部分。

模块端口声明

moduletop_module(
inputclk,
inputw,R,E,L,
outputQ
);

题目解析

还是实现包含选择器和触发器的部分。

moduletop_module(
inputlogicclk,
inputlogicw,R,E,L,
outputlogicQ
);
always_ff@(posedgeclk)begin
casex({E,L})
2'b00:Q<= Q ;
            2'bx1: Q <= R ;
            2'b10: Q <= w ;
        endcase
    end

endmodule

4f9c4776-6610-11ed-8abf-dac502259ad0.png

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

4fbde52a-6610-11ed-8abf-dac502259ad0.png

注意图中无参考波形。

这一题就结束了。

Problem 92-ece241_2014_q4

题目说明

如下图所示的状态机,假设D触发器在状态机启动之前初始化为0,实现该电路:

4fd9a404-6610-11ed-8abf-dac502259ad0.png 图片来自HDLBits

模块端口声明

moduletop_module(
inputclk,
inputx,
outputz
);

题目解析

首先先写出组合电路中逻辑,然后再写时序电路逻辑即可。

moduletop_module(
inputlogicclk,
inputlogicx,
outputlogicz
);
varlogicQ1,Q2,Q3,D1,D2,D3;

always_combbegin
D1=x^Q1;
D2=x&~Q2;
D3=x|~Q3;

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

always_ff@(posedgeclk)begin
Q1<= D1 ;
        Q2 <= D2 ;
        Q3 <= D3 ;
    end

endmodule


4feecc08-6610-11ed-8abf-dac502259ad0.png

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

500a02a2-6610-11ed-8abf-dac502259ad0.png

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

这一题就结束了。

Problem 93-ece241_2013_q7

题目说明

JK 触发器真值表如下。实现一个 JK 触发器。注意:Qold 是正时钟沿之前 D 触发器的输出。

502c553c-6610-11ed-8abf-dac502259ad0.png

图片来自HDLBits

模块端口声明

moduletop_module(
inputclk,
inputj,
inputk,
outputQ);

题目解析

这道题目要求是根据真值表写出逻辑表达式,当然也可以直接根据特性方程写出逻辑。

JK触发器的特性方程如下:

503cc020-6610-11ed-8abf-dac502259ad0.png

505ebae0-6610-11ed-8abf-dac502259ad0.png

moduletop_module(
inputlogicclk,
inputlogicj,
inputlogick,
outputlogicQ);

varlogicD;
always_combbegin
case({j,k})
2'b00:D=Q;
2'b01:D='0;
2'b11:D=~Q;
2'b10:D='1;
endcase
end

always_ff@(posedgeclk)begin
Q<= D;
    end
endmodule


506d2be8-6610-11ed-8abf-dac502259ad0.png

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

508d1336-6610-11ed-8abf-dac502259ad0.png

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

这一题就结束了。

Problem 94-Edgedetect

题目说明

对于 8 位向量中的每一位,检测输入信号何时从一个时钟周期的 0 变为下一个时钟周期的 1(类似于上升沿检测)。输出位应在发生 0 到 1 转换后的周期内。

下图给我们展示了输入in[1]和输出pedge[1]的时序关系图:

50b4e208-6610-11ed-8abf-dac502259ad0.png

图片来自HDLBits

模块端口声明

moduletop_module(
inputclk,
input[7:0]in,
output[7:0]pedge
);

题目解析

查看:

https://blog.csdn.net/qq_31799983/article/details/81544707

moduletop_module(
inputlogicclk,
inputlogic[7:0]in,
outputlogic[7:0]pedge
);
wirelogic[7:0]in_reg_n,in_reg_l;

always_ff@(posedgeclk)begin
in_reg_n<= in ;
        in_reg_l <= in_reg_n ;
    end
    
    assign pedge = in_reg_n&~in_reg_l ;


endmodule

50c0511a-6610-11ed-8abf-dac502259ad0.png

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

50df7432-6610-11ed-8abf-dac502259ad0.png

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

这一题就结束了。

Problem 95-Edgedetect2

题目说明

在一个8bit的变量中,从一个周期到另一个周期期间,检测输入信号变化。即上升沿变化或下降沿变化。输出应在0变为1后产生。

如下图所示为输入与输出的时序关系

510db1a8-6610-11ed-8abf-dac502259ad0.png

图片来自HDLBits

模块端口声明

moduletop_module(
inputclk,
input[7:0]in,
output[7:0]anyedge
);

题目解析

双边沿检测,在上一题基础上加上下降沿检测即可。

moduletop_module(
inputlogicclk,
inputlogic[7:0]in,
outputlogic[7:0]anyedge
);

wirelogic[7:0]in_reg,edge_flag;

always_ff@(posedgeclk)begin
in_reg<= in ;
    end
    
    assign edge_flag = in&~in_reg | ~in&in_reg ;
    
    always_ff@(posedge clk) begin
        anyedge <= edge_flag ;
    end
endmodule



512aee26-6610-11ed-8abf-dac502259ad0.png

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

514952e4-6610-11ed-8abf-dac502259ad0.png

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

这一题就结束了。

Problem 96-Edgecapture

题目说明

对于 32 位向量中的每一位,在输入信号从一个时钟周期的 1 变为下一个时钟周期的 0 时进行捕捉。“捕获”表示输出将保持为 1,直到寄存器复位(同步复位)。

每个输出位的行为类似于 SR 触发器:输出位应在 1 到 0 转换发生后的周期设置(为 1)。当复位为高电平时,输出位应在正时钟沿复位(为 0)。

如果上述两个事件同时发生,则复位优先。在下面示例波形的最后 4 个周期中,“reset”事件比“set”事件早一个周期发生,因此这里不存在冲突。

在下面的示例波形中,为清楚起见,reset、in[1] 和 out[1] 被突出显示。

516fe22e-6610-11ed-8abf-dac502259ad0.png

图片来自HDLBits

模块端口声明

moduletop_module(
inputclk,
inputreset,
input[31:0]in,
output[31:0]out
);

题目解析

moduletop_module(
inputlogicclk,
inputlogicreset,
inputlogic[31:0]in,
outputlogic[31:0]out
);

varlogic[31:0]capture,in_reg;

always_ff@(posedgeclk)begin
if(reset)out<= '0;
        else
                  out <= capture ;
    end
    
    always_ff@(posedge clk) begin
           in_reg <= in ;
    end
    
    assign capture = ~in & in_reg | out;
endmodule

518bbcd8-6610-11ed-8abf-dac502259ad0.png

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

51af2560-6610-11ed-8abf-dac502259ad0.png

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

这一题就结束了。

Problem 97-Dualedge

题目说明

熟悉在时钟上升沿或时钟下降沿触发的触发器。在时钟的两个边沿触发双边触发触发器。

但是,FPGA 没有双边触发触发器,并且不接受 @(posedge clk or negedge clk)作为合法的敏感度列表。

构建一个功能类似于双边触发触发器的电路:

(注意:不一定完全等效:触发器的输出没有毛刺,但模拟这种行为的更大组合电路可能。)

51d7b3fe-6610-11ed-8abf-dac502259ad0.png

图片来自HDLBits

模块端口声明

moduletop_module(
inputclk,
inputd,
outputq
);

题目解析

无法在 FPGA 上创建双边触发触发器。但是可以同时创建正沿触发和负沿触发触发器。

moduletop_module(
inputlogicclk,
inputlogicd,
outputlogicq
);
varlogictemp1,temp2;
always_ff@(posedgeclk)begin
temp1<= d^temp2 ;
    end
    
    always_ff@(negedge clk) begin
        temp2 <= d^temp1 ;
    end
    
    assign q = temp1^temp2 ;

endmodule

51e5fbee-6610-11ed-8abf-dac502259ad0.png

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

5208202a-6610-11ed-8abf-dac502259ad0.png

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

这一题就结束了。

总结

今天的几道题就结束了,对于理解触发器的非常有帮助,而且难度稍微增加了,对于阅读波形设计逻辑非常有帮助。





审核编辑:刘清

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

    关注

    1

    文章

    114

    浏览量

    21677
  • 触发器
    +关注

    关注

    14

    文章

    1995

    浏览量

    61029
  • Verilog语言
    +关注

    关注

    0

    文章

    113

    浏览量

    8209
  • 多路选择器
    +关注

    关注

    1

    文章

    22

    浏览量

    6513

原文标题:HDLBits: 在线学习 SystemVerilog(十五)-Problem 90-97(触发器和锁存器(2))

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

收藏 人收藏

    评论

    相关推荐

    文解析多路选择器的工作原理及电路实现

    本文开始介绍了多路选择器的概念和在FPGA中多路选择器结构,其次介绍了多路选择器工作原理与应用,
    的头像 发表于 04-27 08:46 6w次阅读
    <b class='flag-5'>一</b>文解析<b class='flag-5'>多路</b><b class='flag-5'>选择器</b>的工作原理及电路实现

    EDA四选一多路选择器的设计

    多路选择器(又称为数据选择器)①功能在选择变量控制下,从多路输入数据中选中某路数据送至输出端。
    发表于 04-12 09:17

    基于FPGA的多路选择器设计(附代码)

    开关。 · 二选一多路选择器 二选一多路选择器的数据输入有两,分别为dataa和datab。为了能够确定
    发表于 03-01 17:10

    多路优先触发器

    多路优先触发器
    发表于 04-13 10:15 756次阅读
    <b class='flag-5'>多路</b>优先<b class='flag-5'>触发器</b>

    译码多路选择器的使用( EDA 仿真) 实验

    译码多路选择器的使用( EDA 仿真) 实验 、实验目的1. 掌握Multisim电子电路仿真软件的使用,并能进行
    发表于 02-06 14:11 6158次阅读
    译码<b class='flag-5'>器</b>及<b class='flag-5'>多路</b><b class='flag-5'>选择器</b>的使用( EDA 仿真) 实验

    施密特触发器,施密特触发器是什么意思

    施密特触发器,施密特触发器是什么意思 施密特触发器也有两稳定状态,但与触发器不同的是,施
    发表于 03-08 14:14 1935次阅读

    多路选择器有哪些_多路选择器分类介绍

    本文开始介绍了多路选择器的分类与多路选择器的4选1原理图,其次介绍了多路选择器的典型芯片,最后介
    的头像 发表于 04-27 09:13 3.5w次阅读
    <b class='flag-5'>多路</b><b class='flag-5'>选择器</b>有哪些_<b class='flag-5'>多路</b><b class='flag-5'>选择器</b>分类介绍

    4选1多路选择器电路图(四款多路选择器电路)

    本文主要介绍了四款4选1多路选择器电路图。多路选择器是数据选择器的别称。在多路数据传送过程中,能
    发表于 04-27 09:37 14w次阅读
    4选1<b class='flag-5'>多路</b><b class='flag-5'>选择器</b>电路图(四款<b class='flag-5'>多路</b><b class='flag-5'>选择器</b>电路)

    设计1位的二选一多路选择器及其VHDL描述

    本文首先介绍了二选一多路选择器真值表,其次介绍了1位二选一多路选择器设计及其VHDL描述,最后介绍了它的逻辑表达式实现。
    的头像 发表于 04-27 09:52 3.1w次阅读
    设计<b class='flag-5'>一</b><b class='flag-5'>个</b>1位的二选<b class='flag-5'>一多路</b><b class='flag-5'>选择器</b>及其VHDL描述

    eda四选一多路选择器的设计

    本文开始对多路选择器进行了详细介绍,其中包括了多路选择器功能、典型芯片及应用,另外还详细介绍了eda四选一多路
    发表于 04-27 10:13 3.4w次阅读
    eda四选<b class='flag-5'>一多路</b><b class='flag-5'>选择器</b>的设计

    8选1多路选择器电路图(五款8选1多路选择器电路)

    多路选择器又称数据选择器。8选1数据选择器(型号有74151、74LS151、74251、74LS152),下面就以74LS151为例子,介绍几款电路图。
    发表于 04-28 17:25 13w次阅读
    8选1<b class='flag-5'>多路</b><b class='flag-5'>选择器</b>电路图(五款8选1<b class='flag-5'>多路</b><b class='flag-5'>选择器</b>电路)

    Verilog HDL之多路选择器设计

    在数字信号的传输过程中,有时需要从多路输入数据中选出某路数据,完成此功能的逻辑器件称为数据选择器,即所谓多路开关,简称MUX(Multiplexer)。2选1
    发表于 07-20 08:56 4588次阅读
    Verilog HDL之<b class='flag-5'>多路</b><b class='flag-5'>选择器</b>设计

    电平触发器,脉冲触发器和边沿触发器触发因素是什么

    脉冲触发器由两相同的电平触发的SR触发器组成,其中左SR触发器成为主触发器,右手侧称为从
    的头像 发表于 02-11 10:56 9195次阅读
    电平<b class='flag-5'>触发器</b>,脉冲<b class='flag-5'>触发器</b>和边沿<b class='flag-5'>触发器</b>的<b class='flag-5'>触发</b>因素是什么

    基于FPGA的多路选择器设计

    组合逻辑电路的输出信号只与当前时刻的输入信号有关,与其他时刻的输入状态无关,无存储电路或反馈电路。多路选择器是在多路数据传送过程中,根据需要选择
    的头像 发表于 05-12 12:47 1472次阅读
    基于FPGA的<b class='flag-5'>多路</b><b class='flag-5'>选择器</b>设计

    t触发器和jk触发器的区别和联系

    稳态触发器,具有触发输入(T输入)和时钟输入,以及
    的头像 发表于 02-06 14:04 5705次阅读