2016-07-22 3 views
2

VHDL을 처음 사용합니다. 나는 덧셈 뺄셈 기의 코드를 작성하려고했다. 곡면을위한 입력 버스 중 하나는 합성 후 지상에 연결됩니다. 나는 Ubuntu 14.04 LTS 64 비트에서 자일링스 ISE 14.2를 사용하고있다.VHDL 입력을 강제로 접지

library IEEE; 
    use IEEE.STD_LOGIC_1164.ALL; 
    use IEEE.NUMERIC_STD.ALL; 

    entity examples is 
    Generic(n: Natural :=8); 
    port (
      A : in std_logic_vector(n-1 downto 0); 
      B : in std_logic_vector(n-1 downto 0); 
     subtract : in std_logic; 
     sum: out std_logic_vector(n-1 downto 0); 
     carry : out std_logic 
    ); 
    end examples; 

    architecture Behavioral of examples is 
     Signal result: std_logic_vector(n downto 0); 
    begin 

     my_adder_subtractor : process(A,B,subtract) 
      begin 
      if(subtract = '0') Then 
       result <= std_logic_vector(('0' & unsigned(A))+('0' & unsigned(B))); 

      else 
       result <= std_logic_vector(('0' & unsigned(A))-('0' & unsigned(B))); 
      end if; 
      sum <= result(n-1 downto 0); 
      carry <= result(n); 
     end process my_adder_subtractor; 

    end Behavioral; 

RTL 회로도 :이 방법에 대해

RTL schematic

+0

질문이 무엇입니까. – lorond

+0

제 질문은 포트 A가 지상에 연결된 이유입니다. –

답변

1

. 그게 작동하는지 알려주세요. 내 VHDL 돌아갑니다.

library IEEE; 
use IEEE.STD_LOGIC_1164.ALL; 
use IEEE.NUMERIC_STD.ALL; 

entity examples is 
Generic(n: Natural :=8); 
port (
    A : in std_logic_vector(n-1 downto 0); 
    B : in std_logic_vector(n-1 downto 0); 
    subtract, clk : in std_logic; 
    sum: out std_logic_vector(n-1 downto 0); 
    carry : out std_logic_vector(0 downto 0) 
); 
end examples; 

    architecture Behavioral of examples is 
    begin 
     process(clk) 
      begin 
      if(subtract = '0') then 
       (carry, sum) <= ('0' & A)+('0' & B); 
      else 
       (carry, sum) <= ('0' & A)-('0' & B); 
      end if; 
     end process; 
    end Behavioral; 
+0

제 질문은 포트 A가 지상에 연결된 이유입니다. 또한 2 개의 신호를 추가하려고했습니다. 나는 뭔가를 놓칠 수 있습니다. 신호의 데이터 유형은 무엇이되어야합니까? 나는 std logic vector로 시도했다. –

+0

글쎄, 여러 가지가 구현과 조금 떨어져 보인다. 프로세스가 메모리 요소 (D-Latch)를 유추하기 때문에 (A, B, substract)에 프로세스가 없어야합니다. 그것은 나에게 당신이 또한 작전을 수행하는 3 개의 다른 입력의 방아쇠로 국가를 바꿀 것이라고 생각합니다. 또한 나는 왜 당신이 당신의 입력을 std_logic_vectors로 정의했는지 이해하지 못한다. 처음에는 부호없는 권리로 정의하십시오. unisgned는 synthetisable이며, 그것을 캐스팅 할 필요가 없습니다. – h3X3n

+0

그런데 실제로 클럭 신호에 대한 프로세스를 만들 필요가 없습니다. 메모리 요소를 원했던 것처럼 보였기 때문에 그냥 놓았지만 A, B 및 substract (메모리 요소는 사실상 쓸모 없게 만듭니다. [동작에서 아무것도 변경하지 않고 프로세스를 제거 할 수 있음]) 상태를 전환하는 데 문제가있었습니다. – h3X3n

-1

아니요 A은 접지되지 않습니다. 자일링스 ISE의 ​​RTL 설계도는 좋지 않다 ...

덧셈기 입력의 입력 비트 중 하나는 0이다. 따라서 A은 하나의 접지 비트와 연결됩니다. "실제"회로를 보려면 RTL 기술 회로도를여십시오.

+0

시뮬레이션 결과도 올바르지 않습니다. 예를 들어, 00110000 및 B = 00100001주는 Sum = 00000000 –

+0

RTL 기술을 게시 할 수 있습니까? 개략도? – Paebbels