VHDL,选择信号,连接

时间:2015-10-21 00:17:18

标签: concatenation vhdl

需要了解如何使用选定信号分配并包含一个4位内部信号,称为WXYZ,通过将W与X连接,Y与Z连接,用于以下布尔代数表达式F(W,X,Y,Z)= Y'Z '+ W'X' + X'Y

ENTITY Part_2A IS 
PORT(
    W, X, Y, Z  : IN STD_LOGIC;
    G1          : OUT STD_LOGIC);       
END Part_2A;

ARCHITECTURE sig OF Part_2A IS

SIGNAL inputs : STD_LOGIC_VECTOR(3 downto 0);
SIGNAL outputs: STD_LOGIC;
BEGIN 
--Concatenate input ports into 4-bit signal
inputs <= W & X & Y & Z;
WITH inputs SELECT         
    outputs     <=  "1" when "0000",
                    "1" when "0001",
                    "1" when "0010",
                    "1" when "0011",
                    "1" when "0100",
                    "1" when "1000",
                    "1" when "1010",
                    "1" when "1011",
                    "1" when "1100",
                    "0" when others;
G1 <= outputs;
END sig;

1 个答案:

答案 0 :(得分:1)

你不能提出比

更好的问题
  

需要了解如何使用选定信号分配并包含一个4位内部信号,称为WXYZ,通过将W与X连接,Y与Z连接,用于以下布尔代数表达式F(W,X,Y,Z)= Y'#39; Z&#39 + W&#39; X&#39; + X&#39; Y

我甚至没有在那里看到问号。

添加了一个引用IEEE库std_logic_1164的上下文子句,并将字符串文字"1""0"转换为字符文字'1&#39;和'0'(字符文字是可接受的枚举文字,std_ulogic std_logic的基本类型是枚举标量类型),我们有类似的东西:

library ieee;
use ieee.std_logic_1164.all;

entity part_2a is 
    port (
        w, x, y, z  : in std_logic;
        g1          : out std_logic
    );       
end entity part_2a;

architecture sig of part_2a is

    signal inputs : std_logic_vector(3 downto 0);
    signal outputs: std_logic;
begin 
--concatenate input ports into 4-bit signal

    inputs <= w & x & y & z;

    with inputs select         
        outputs <=  '1' when "0000",
                    '1' when "0001",
                    '1' when "0010",
                    '1' when "0011",
                    '1' when "0100",
                    '1' when "1000",
                    '1' when "1010",
                    '1' when "1011",
                    '1' when "1100",
                    '0' when others;
    g1 <= outputs;
end architecture sig;

哪些分析没有错误。

您的VHDL工具可能误导了您。有一些VHDL实现专门抱怨类型不匹配。例如ghdl:

  

ghdl -a part_2a.vhdl
  part_2a.vhdl:21:21:不能匹配字符串文字&#34; 1&#34;使用类型枚举子类型&#34; std_logic&#34;
  part_2a.vhdl:22:21:不能匹配字符串文字&#34; 1&#34;使用类型枚举子类型&#34; std_logic&#34;
  part_2a.vhdl:23:21:不能匹配字符串文字&#34; 1&#34;使用类型枚举子类型&#34; std_logic&#34;
  part_2a.vhdl:24:21:不能匹配字符串文字&#34; 1&#34;使用类型枚举子类型&#34; std_logic&#34;
  part_2a.vhdl:25:21:不能匹配字符串文字&#34; 1&#34;使用类型枚举子类型&#34; std_logic&#34;
  part_2a.vhdl:26:21:不能匹配字符串文字&#34; 1&#34;使用类型枚举子类型&#34; std_logic&#34;
  part_2a.vhdl:27:21:不能匹配字符串文字&#34; 1&#34;使用类型枚举子类型&#34; std_logic&#34;
  part_2a.vhdl:28:21:不能匹配字符串文字&#34; 1&#34;使用类型枚举子类型&#34; std_logic&#34;
  part_2a.vhdl:29:21:不能匹配字符串文字&#34; 1&#34;使用类型枚举子类型&#34; std_logic&#34;
  part_2a.vhdl:30:21:不能匹配字符串文字&#34; 0&#34;使用类型枚举子类型&#34; std_logic&#34;
  ghdl:编译错误

虽然有些人在第一次出错时退出:

nvc -a part_2a.vhdl  
** Error: no one dimensional arrays of character type in context
       File part_2a.vhdl, Line 21  
       outputs     <=  "1" when "0000",  
                       ^^^

如果你有一个只是指向声明的开头

WITH inputs SELECT

如果没有有用的信息,您可能会认为它是串联问题(取决于实际的错误消息所说的内容)。这解释了为什么Minimal, Complete, and Verifiable example可能有价值。

错误消息往往与特定供应商不同,并告诉您要执行的操作。