VHDL综合
我有一个关于VHDL合成的问题,我希望你们中的一些人能帮助我。我有以下加法器模型:VHDL综合,vhdl,Vhdl,我有一个关于VHDL合成的问题,我希望你们中的一些人能帮助我。我有以下加法器模型: LIBRARY IEEE; USE IEEE.std_logic_1164.ALL; USE IEEE.numeric_std.ALL; ENTITY Q3a IS PORT (A_MSB,B_MSB,A_LSB,B_LSB : IN std_logic_vector(3 DOWNTO 0):="0000"; SEL : IN st
LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
USE IEEE.numeric_std.ALL;
ENTITY Q3a IS
PORT (A_MSB,B_MSB,A_LSB,B_LSB : IN std_logic_vector(3 DOWNTO 0):="0000";
SEL : IN std_logic:='0';
CARRY : OUT std_logic:='0';
OUTPUT : OUT std_logic_vector(7 DOWNTO 0):="00000000");
END ENTITY Q3a;
ARCHITECTURE behavioral OF Q3a IS
SIGNAL A,B,SUM,B_NEG : std_logic_vector(8 DOWNTO 0);
BEGIN
A <= (A_MSB(3) & '0' & A_MSB(2 DOWNTO 0) & A_LSB) WHEN A_MSB(3) = '0' ELSE
(A_MSB(3) & '1' & A_MSB(2 DOWNTO 0) & A_LSB);
B <= (B_MSB(3) & '0' & B_MSB(2 DOWNTO 0) & B_LSB) WHEN B_MSB(3) = '0' ELSE
(B_MSB(3) & '1' & B_MSB(2 DOWNTO 0) & B_LSB);
B_NEG <= std_logic_vector(signed(not(B_MSB(3) & '0' & B_MSB(2 DOWNTO 0) & B_LSB))+1);
SUM <= std_logic_vector(signed(A)+ signed(B)) WHEN SEL = '0' ELSE
std_logic_vector(signed(A)+ signed(B_NEG));
CARRY <= SUM(7);
OUTPUT <= SUM(8) & SUM(6 DOWNTO 0);
END ARCHITECTURE behavioral;
IEEE库;
使用IEEE.std_logic_1164.ALL;
使用IEEE.numeric_std.ALL;
实体Q3a是
端口(A_MSB,B_MSB,A_LSB,B_LSB:在标准逻辑向量(3到0)中):=“0000”;
SEL:在标准逻辑中:='0';
执行:执行标准逻辑:='0';
输出:输出标准逻辑向量(7到0):=“00000000”);
最终实体Q3a;
Q3a的架构是
信号A,B,和,B_负:标准逻辑向量(8到0);
开始
A在您的设计中有一个mux,正如Brian所说,A
的逻辑简化为A在您的设计中有一个mux,正如Brian所说,A
的逻辑简化为A在进行更改后,我有以下架构:
ARCHITECTURE behavioral OF Q3a IS
SIGNAL A,B,SUM,B_NEG : std_logic_vector(8 DOWNTO 0);
BEGIN
A <= (A_MSB(3) & A_MSB & A_LSB);
B <= (B_MSB(3) & B_MSB & B_LSB);
B_NEG <= std_logic_vector(-signed(B));
SUM <= std_logic_vector(signed(A)+ signed(B)) WHEN SEL = '0' ELSE
std_logic_vector(signed(A)+ signed(B_NEG));
CARRY <= SUM(7);
OUTPUT <= SUM(8) & SUM(6 DOWNTO 0);
END ARCHITECTURE behavioral;
Q3a的架构行为是
信号A,B,和,B_负:标准逻辑向量(8到0);
开始
A进行更改后,我有以下体系结构:
ARCHITECTURE behavioral OF Q3a IS
SIGNAL A,B,SUM,B_NEG : std_logic_vector(8 DOWNTO 0);
BEGIN
A <= (A_MSB(3) & A_MSB & A_LSB);
B <= (B_MSB(3) & B_MSB & B_LSB);
B_NEG <= std_logic_vector(-signed(B));
SUM <= std_logic_vector(signed(A)+ signed(B)) WHEN SEL = '0' ELSE
std_logic_vector(signed(A)+ signed(B_NEG));
CARRY <= SUM(7);
OUTPUT <= SUM(8) & SUM(6 DOWNTO 0);
END ARCHITECTURE behavioral;
Q3a的架构行为是
信号A,B,和,B_负:标准逻辑向量(8到0);
开始
A如果我理解正确,您需要一个加法器用于A+b和A+b_neg,以及一个在b或b_neg之间选择的mux。
你没有明确地写出来,你需要这样写
architecture behavioral of Q3a is
signal a,b,sum,b_neg : std_logic_vector(8 downto 0);
signal b_addr : std_logic_vector(8 downto 0);
begin
a <= (a_msb(3) & a_msb & a_lsb);
b <= (b_msb(3) & b_msb & b_lsb);
b_neg <= std_logic_vector(-signed(b));
b_addr <= b when sel = '0' else b_neg;
sum <= std_logic_vector(signed(a)+ signed(b_addr));
carry <= sum(7);
output <= sum(8) & sum(6 downto 0);
end architecture behavioral;
Q3a的架构行为是
信号a,b,和,b_负:标准逻辑向量(8到0);
信号b_addr:std_逻辑_向量(8到0);
开始
a如果我理解正确,您需要一个加法器用于a+b和a+b_neg,以及一个在b或b_neg之间选择的mux。
你没有明确地写出来,你需要这样写
architecture behavioral of Q3a is
signal a,b,sum,b_neg : std_logic_vector(8 downto 0);
signal b_addr : std_logic_vector(8 downto 0);
begin
a <= (a_msb(3) & a_msb & a_lsb);
b <= (b_msb(3) & b_msb & b_lsb);
b_neg <= std_logic_vector(-signed(b));
b_addr <= b when sel = '0' else b_neg;
sum <= std_logic_vector(signed(a)+ signed(b_addr));
carry <= sum(7);
output <= sum(8) & sum(6 downto 0);
end architecture behavioral;
Q3a的架构行为是
信号a,b,和,b_负:标准逻辑向量(8到0);
信号b_addr:std_逻辑_向量(8到0);
开始
aa
的巨型表达式与a井有何不同?它在_MSB(3)和_MSB(2D---)之间添加了一个位。它还使用mux检查_MSB(3)是否是“1”或“0”,以标识输入是neg还是pos。然后相应地更改溢出/进位的附加位。是的,但除非我遗漏了某些内容,否则添加的位与我的中的相同。那么,我遗漏了什么?(除元值外)。lol:)确实是。。。。非常感谢。你也能对合成添加一些评论吗?除了一个过于复杂的表达式可能会使乐观主义者困惑之外,没有其他评论,这可能发生在这里。比较简化前后的资源使用情况。(我会在模拟中再次检查减法是否在所有情况下都正确。我觉得B和B_Neg应该更加对称。)a的a
的巨大表达式与a有何不同呢?它在a_MSB(3)和a_MSB(2d)之间加了一点。它还使用mux检查a_MSB(3)是否正确是“1”或“0”,以标识输入是neg还是pos。然后相应地更改溢出/进位的附加位。是的,但除非我遗漏了某些内容,否则添加的位与我的中的相同。那么,我遗漏了什么?(除元值外)。lol:)确实是。。。。非常感谢。你也能对合成添加一些评论吗?除了一个过于复杂的表达式可能会使乐观主义者困惑之外,没有其他评论,这可能发生在这里。比较简化前后的资源使用情况。(我会在模拟中再次检查你的减法在所有情况下都正确。我觉得B和B_Neg应该更对称。)