使用VHDL的专用计算器

使用VHDL的专用计算器,vhdl,Vhdl,我必须使用VHDL在Basys3板上投影一个专用计算器。计算器应该能够使用括号对数字进行分组,执行加法、减法和或运算。例如,表达式可以是:4+5和6+(7或1)-(4和10) 输入数字为4位数字(在我的代码中,我使用了5位数字,最高有效位为符号位),输出长度最多为16位(我在代码中使用了17位,最高有效位为符号位) 我为ALU(加法器/减法器和/或)编写了代码,并且我设法使计算器能够处理2个数字作为输入(使用2个in端口)。这是我编写的计算器的“主”代码: library IEEE; use i

我必须使用VHDL在Basys3板上投影一个专用计算器。计算器应该能够使用括号对数字进行分组,执行加法、减法和或运算。例如,表达式可以是:4+5和6+(7或1)-(4和10)

输入数字为4位数字(在我的代码中,我使用了5位数字,最高有效位为符号位),输出长度最多为16位(我在代码中使用了17位,最高有效位为符号位)

我为ALU(加法器/减法器和/或)编写了代码,并且我设法使计算器能够处理2个数字作为输入(使用2个in端口)。这是我编写的计算器的“主”代码:

library IEEE;
use ieee.STD_LOGIC_1164.all;
use ieee.STD_LOGIC_UNSIGNED.all;

entity calculator is
 port(X: in STD_LOGIC_VECTOR(4 downto 0);    -- X(4) sign 
    Y: in STD_LOGIC_VECTOR(4 downto 0);
    OPERATIE: in STD_LOGIC_VECTOR(4 downto 0);
    CLK, CLR: in STD_LOGIC;
    a_to_g: out STD_LOGIC_VECTOR(6 downto 0);
    an: out STD_LOGIC_VECTOR(3 downto 0);
    negativ: out std_logic);
end calculator;

architecture calculator of calculator is

component ALU is
    port(A,B: in STD_LOGIC_VECTOR(16 downto 0);
    COMANDA: in STD_LOGIC_VECTOR(4 downto 0);
    RESULT: out STD_LOGIC_VECTOR(16 downto 0));
end component;

component BCD_7seg is
    port(X: in STD_LOGIC_VECTOR(15 downto 0);
    CLK, CLR: in STD_LOGIC;
    a_to_g: out STD_LOGIC_VECTOR(6 downto 0);
    an: out STD_LOGIC_VECTOR(3 downto 0));
end component;

signal OPERAND_1: STD_LOGIC_VECTOR(16 downto 0) := (others => '0');   
signal OPERAND_2: STD_LOGIC_VECTOR(16 downto 0) := (others => '0');   
signal TEMP_RESULT: STD_LOGIC_VECTOR(16 downto 0) := (others => '0'); 

begin  
    operand_1(3 downto 0) <= x(3 downto 0);
    operand_1(16) <= x(4);

    operand_2(3 downto 0) <= y(3 downto 0);
    operand_2(16) <= y(4);

    calculate: ALU port map(operand_1, operand_2, operatie, temp_result);

    afis: BCD_7seg port map(temp_result(15 downto 0), clk, clr, a_to_g, an);
    negativ <= temp_result(16);
end calculator;
IEEE库;
使用ieee.STD_LOGIC_1164.all;
使用ieee.STD_LOGIC_UNSIGNED.all;
实体计算器是
端口(X:标准逻辑向量(4到0);--X(4)符号
Y:标准逻辑向量(4到0);
操作:标准逻辑向量(4到0);
CLK,CLR:标准逻辑中;
a到g:输出标准逻辑向量(6到0);
an:输出标准逻辑向量(3到0);
否定:输出标准(U逻辑);
终端计算器;
计算器的体系结构是计算器
组件ALU为
端口(A,B:标准逻辑向量中(16向下至0);
COMANDA:标准逻辑向量(4到0);
结果:输出STD_逻辑_向量(16到0);
端部元件;
组件BCD_7seg为
端口(X:STD_逻辑_向量中(15到0);
CLK,CLR:标准逻辑中;
a到g:输出标准逻辑向量(6到0);
an:输出标准逻辑向量(3到0);
端部元件;
信号操作数_1:STD_逻辑_向量(16到0):=(其他=>'0');
信号操作数_2:STD_逻辑_向量(16到0):=(其他=>'0');
信号温度结果:标准逻辑向量(16到0):=(其他=>'0');
开始

操作数_1(3到0)IMHO最好在…上问这样的问题,我的答案是,您需要某种调度程序。我建议看一个架构。整个项目必须是HDL?因为您可以将VHDL实体仅用于输入和输出,并将的数据传递给某些软核,例如Microblaze,然后用c.Thx解析它以用于回复,是的,整个项目必须使用VHDL。如何解析括号和运算符?你的问题中没有说明这一点。您只需提到5位有符号值