Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Logic 同步与异步逻辑-SR触发器_Logic_Vhdl_Fpga_Flip Flop_Digital Design - Fatal编程技术网

Logic 同步与异步逻辑-SR触发器

Logic 同步与异步逻辑-SR触发器,logic,vhdl,fpga,flip-flop,digital-design,Logic,Vhdl,Fpga,Flip Flop,Digital Design,我遇到了一个逻辑设计,我有一些问题。第一个问题是这种设计中是否有两个独立的SR触发器?第二个问题是时钟是否通常用于通过设计传播输入,或者这是否可以称为组合?因为我很难理解将输入传输到输出需要多少时钟周期。如果我理解正确,首先需要一个时钟周期通过设计的第一部分(第一个触发器?)传播,然后第二个时钟周期将新输入传播到设计的第二部分(第二个触发器?) 我正在尝试用VHDL实现此设计,但不完全确定我是否可以这样做: entity logic_design is port( R :

我遇到了一个逻辑设计,我有一些问题。第一个问题是这种设计中是否有两个独立的SR触发器?第二个问题是时钟是否通常用于通过设计传播输入,或者这是否可以称为组合?因为我很难理解将输入传输到输出需要多少时钟周期。如果我理解正确,首先需要一个时钟周期通过设计的第一部分(第一个触发器?)传播,然后第二个时钟周期将新输入传播到设计的第二部分(第二个触发器?)

我正在尝试用VHDL实现此设计,但不完全确定我是否可以这样做:

entity logic_design is
  port(
    R     : in std_logic;
    S1    : in std_logic;
    R1    : in std_logic;
    A     : in std_logic;

    Q     : out std_logic;
    Q_bar : out std_logic
  );
end logic_design;

architecture Behavioral of logic_design is

signal sig_Q1_out     : std_logic;
signal sig_Q1_bar_out : std_logic;
signal sig_Q2_out     : std_logic;
signal sig_Q2_bar_out : std_logic;

begin

process(S1, R1)
begin

   sig_Q1_out     <= S1 nand sig_Q1_bar_out;
   sig_Q1_bar_out <= R1 nand sig_Q1_out;

   sig_Q2_out     <= sig_Q1_out nor sig_Q2_bar_out;
   sig_Q2_bar_out <= (sig_Q2_out nor A) nor R;

end process;

Q     <= signal_Q2_out;
Q_bar <= signal_Q2_bar_out;
实体逻辑\u设计
港口(
R:在标准逻辑中;
S1:标准逻辑中;
R1:标准逻辑中;
答:标准逻辑;
Q:输出标准逻辑;
Q_栏:输出标准逻辑
);
终端逻辑设计;
逻辑设计的体系结构是
信号sig_Q1_out:标准逻辑;
信号信号输出:标准逻辑;
信号sig_Q2_out:标准逻辑;
信号sig_Q2_bar_out:标准逻辑;
开始
过程(S1、R1)
开始

sig_Q1_out目前,您的设计是组合式的,因为您没有任何时钟,也没有移位寄存器触发器。这意味着,如果更改输入,输出将直接更新,可能会有延迟,但在模拟过程中不考虑延迟

如果您希望您的设计是顺序的,您需要添加寄存器(又名.D触发器)来存储临时结果。DFF的行为是存储输入并将其作为输出传递到上升沿时钟上

考虑到D是输入,Q是输出,您可以看到,您需要等待时钟的下一个上升沿,以将输入信号传播到输出或组合设计中。这就是如何使电路同步并顺便创建管道的方法

我建议您尝试用这种行为自己实现一个D触发器,并在每个输入前添加一个,在每个输出后添加一个。为了获得这种设计:

然后你应该模拟它,你会看到你的输出只在上升沿时钟上变化,你也会看到在输入的变化和输出的更新之间只有一个时钟周期。这也是创建同步电路的原理

如果你想要更多的周期(例如为了提高时钟频率),你必须将你的设计分成两个组合设计,并在它们之间添加一个DFF。例如,在Q1和S2之间。如果这样做,第一个时钟周期将从输入中计算Q1并将其存储在中间DFF中,并且第二个时钟周期将计算Q1的输出。 我认为你应该找一些书或课程来解释如何进行这样的设计,如果你想制作一些数字电路,这是一个必要的基础。

设计中有两个级联SR锁存器,而不是触发器。它们都是经典的交叉耦合NAND锁存器(如果分解第二个锁存器,您可以看到这一点)

这是一个完全组合的电路;没有时钟,你必须从组合的角度思考,而不是时钟/顺序逻辑

不过,我不确定它到底有什么作用。通常,S1和R1为低电平有效控制输入,Q2为低电平有效输出。S1‘设置’(并强制)Q2(设置为0),但重置(设置为1)更为复杂-您必须释放R1,然后设置A或R2,这一点并不明显。它可能是更大电路的一部分——可能是某种类型的触发器实现(请注意,您认为的“时钟”逻辑实际上基本上是一个异步组合电路,就像这个)。一个SR锁存器可以用于去抖动,但这是用于板级设计-你不会在芯片中这样做(你会让所有东西都计时)

您的VHDL是一个良好的开端,但您需要在灵敏度列表中添加一个和R2。在当前逻辑中,当S1或R1发生变化时,它们实际上被采样(因此您添加了两个采样电路,即触发器)。我会把它分成两个过程,第一个对S1和R1敏感,第二个对Q1,A,R2敏感


您可能会将此电路合成到FPGA中,但您需要小心计时,否则它将无法工作。

您的图表和VHDL代码不匹配。。。我很难理解将输入传输到输出需要多少时钟周期。在这两种情况下都没有明显的时钟。你的问题不清楚。你考虑过模拟吗?你没告诉我们它是怎么用的。两张反对票?!为什么?这是一个关于组合逻辑的完全合理的问题,显示了一些研究成果,远远优于绝大多数VHDL或Verilog问题。