Concurrency 请澄清VHDL中顺序和并发执行的概念

Concurrency 请澄清VHDL中顺序和并发执行的概念,concurrency,parallel-processing,vhdl,execution,sequential,Concurrency,Parallel Processing,Vhdl,Execution,Sequential,我在学校熟悉了一点Verilog,一年后,我买了一块BASYS3 FPGA板。我的目标是学习VHDL 我一直在读一本叫做“自由范围VHDL”的免费书,这本书对理解VHDL语言有很大帮助。我还搜索了包含VHDL代码的github repos以供参考 我最关心的是顺序执行和并发执行之间的区别。我理解这两个词的含义,但我仍然无法想象为什么我们可以将“过程”用于组合逻辑(即七段解码器)。我已经将我的七段解码器实现为并发语句的条件赋值如果我使用process和switch语句实现解码器,会有什么不同?我不

我在学校熟悉了一点Verilog,一年后,我买了一块BASYS3 FPGA板。我的目标是学习VHDL

我一直在读一本叫做“自由范围VHDL”的免费书,这本书对理解VHDL语言有很大帮助。我还搜索了包含VHDL代码的github repos以供参考

我最关心的是顺序执行和并发执行之间的区别。我理解这两个词的含义,但我仍然无法想象为什么我们可以将“过程”用于组合逻辑(即七段解码器)。我已经将我的七段解码器实现为并发语句的条件赋值如果我使用process和switch语句实现解码器,会有什么不同?我不理解组合逻辑中process的顺序执行这个词。如果它是一个顺序机器——一个状态机,我就会理解它

有人能解释一下这个概念吗

以下是我的七段解码器代码:

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity hex_display_decoder is
    Port ( D: in STD_LOGIC_VECTOR (3 downto 0);
       SEG_OUT : out STD_LOGIC_VECTOR (6 downto 0));
end hex_display_decoder;

architecture dataflow of hex_display_decoder is
begin
  with D select
      SEG_OUT <=  "1000000" when "0000",
                  "1111001" when "0001",
                  "0100100" when "0010",
                  "0110000" when "0011",
                  "0011001" when "0100",
                  "0010010" when "0101",
                  "0000010" when "0110",
                  "1111000" when "0111",
                  "0000000" when "1000",
                  "0010000" when "1001",
                  "0001000" when "1010",
                  "0000011" when "1011",
                  "1000110" when "1100",
                  "0100001" when "1101",
                  "0000110" when "1110",
                  "0001110" when "1111",
                  "1111111" when others;
end dataflow;
IEEE库;
使用IEEE.STD_LOGIC_1164.ALL;
实体十六进制显示解码器为
端口(D:标准逻辑向量(3到0);
SEG_OUT:OUT标准逻辑向量(6到0);
终端十六进制显示解码器;
介绍了十六进制显示解码器的体系结构数据流
开始
用D选择
分开
我最关心的是顺序和并发的区别
执行。我明白这两个词的意思,但我仍然
无法想象为什么我们可以将“过程”用于组合逻辑(例如。
七段解码器)

你混淆了两件事:

  • 逻辑的类型,可以是顺序的或组合的
  • 语句的执行顺序,可以是连续的,也可以是并发的
逻辑类型 在逻辑设计中:

  • 组合电路是一种实现无任何状态的纯逻辑功能的电路。在组合电路中不需要时钟
  • 顺序电路是一种改变每个时钟周期并在时钟周期之间记住其状态(使用触发器)的电路
以下VHDL过程是组合的:

process(x, y) begin
    z <= x or y;
end process;
我们知道它是连续的,因为:

  • 它只对时钟的变化敏感(
    clk
  • 它的输出只改变时钟上升沿的值
  • z
    的输出值取决于其先前的值(
    z
    位于赋值的两侧)
执行模式 长话短说,在VHDL中执行以下过程:

  • 进程中的语句按顺序执行(即在 其他(按顺序排列)
  • 进程相对于彼此并发运行
变相处理 所谓并发语句,本质上是进程之外的所有语句,实际上是伪装的进程。例如,这种并发信号分配(即对进程外部信号的分配):

这已经是一个过程

这反过来意味着

如果我使用 进程和开关语句


完全没有。

参见IEEE Std 1076-2008 11.6并发信号分配语句“并发信号分配语句表示为信号分配值的等效过程语句”。其他并发语句部分将描述如何详细说明这些语句以用于模拟/合成。所有精心设计的模型都通过执行顺序语句进行模拟。如何理解VHDL的模拟周期。自由范围VHDL可能不是足够的资源。如果你声称你所显示的代码是功能考虑网站。谢谢!我不知道有一个代码审查页面。这可能是关于代码审查的主题,假设a)代码有效,B)代码在任何方面都不是假设的或不完整的
process(clk) begin
    if rising_edge(clk) then
        if rst = '1' then
            z <= '0';
        else
            z <= z xor y;
        end if;
    end if;
end process;
z <= x or y;
process(x, y) begin
    z <= x or y;
end process;
SEG_OUT <=  "1000000" when "0000",
            "1111001" when "0001",
            "0100100" when "0010",
            "0110000" when "0011",
            "0011001" when "0100",
            "0010010" when "0101",
            "0000010" when "0110",
            "1111000" when "0111",
            "0000000" when "1000",
            "0010000" when "1001",
            "0001000" when "1010",
            "0000011" when "1011",
            "1000110" when "1100",
            "0100001" when "1101",
            "0000110" when "1110",
            "0001110" when "1111",
            "1111111" when others;