要确定您的代码是否是可综合的,您可以尝试使用ise,或者如果使用modelsim进行模拟,则可以在模型上使用-comck_synthesis选项和vcom。
关于你的代码的一些问题:你为什么这么复杂?
例如
移位器:
如果你真的想用res输入将输出固定为“0000”,那么好吧。
但为什么?
它只是一个组合电路。
为什么你总是分别操纵每个位并使用如此多的临时信号?
无用的赋值:temp1无用的赋值:temp2
完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
我下面的代码有一个未定义的输出。
谁能告诉我问题是什么。 此外,我想请求我的代码可以在你对其进行后期模拟时在xilinx中进行合成。谢谢。 库IEEE;使用IEEE.STD_LOGIC_1164.ALL;使用IEEE.STD_LOGIC_ARITH.ALL;使用IEEE.STD_LOGIC_UNSIGNED.ALL;实体乘数是端口(clk:在STD_LOGIC中; rst:在STD_LOGIC中; en:在STD_LOGIC中; opA:在STD_LOGIC_VECTOR中(3) downto 0); opB:在STD_LOGIC_VECTOR(3 downto 0); res:out STD_LOGIC_VECTOR(7 downto 0);完成:out STD_LOGIC);结束乘数;架构乘数的行为是SIGNAL tempA,tempB,number:STD_LOGIC_VECTOR(3 downto 0 ); SIGNAL回答:STD_LOGIC_VECTOR(7 downto 0); COMPONENT cla_adder PORT(opA:IN std_logic_vector(3 downto 0); opB:IN std_logic_vector(3 downto 0); carry_in:IN STD_LOGIC; sum:OUT std_logic_vector(3 downto 0); carry_out:OUT STD_LOGIC); 结束组成部分; COMPONENT移位器PORT(rst:IN std_logic; op1:IN std_logic_vector(3 downto 0); op2:IN std_logic_vector(3 downto 0); din:IN std_logic; out1:OUT std_logic_vector(3 downto 0); out2:OUT std_logic_vector(3 downto 0)); 结束组成部分; --Inputs SIGNAL op_add1:std_logic_vector(3 downto 0); SIGNAL op_add2:std_logic_vector(3 downto 0); - 输出SIGNAL sum_add:std_logic_vector(3 downto 0); SIGNAL carry_out_add:std_logic; SIGNAL carry_out2:std_logic; SIGNAL out_shift1:std_logic_vector(3 downto 0); SIGNAL out_shift2:std_logic_vector(3 downto 0); 开始添加:cla_adder PORT MAP(opA => op_add1,opB => op_add2,carry_in =>'0',sum => sum_add,carry_out => carry_out_add); 移位:移位器端口映射(rst => rst,op1 => sum_add,op2 => tempB,out1 => out_shift1,out2 => out_shift2,din => carry_out_add); 如果clk'event和clk ='1'则开始进程(rst,clk,en,tempB,number,out_shift1,out_shift2,op_add1,op_add2,carry_out_add)然后如果rst ='1'那么res op_add1 op_add2 number done elsif en =' 1'然后tempA tempB elsif tempB(0)='1'且number =“0000”则op_add2 op_add1 tempB res number elsif tempB(0)='1'且number =“0001”则op_add2 op_add1 tempB res number elsif tempB( 0)='1'且数字=“0010”然后op_add2 op_add1 tempB res number elsif tempB(0)='1'且number =“0100”然后op_add2 op_add1 tempB res number elsif tempB(0)='1'和数字 =“1000”然后op_add2 op_add1 tempB回答完成res号elsif tempB(0)='0'和数字=“0000”然后op_add2 op_add1 tempB res number elsif tempB(0)='0'和number =“0001”然后op_add2 op_add1 tempB res number elsif tempB(0)='0'且number =“0010”then op_add2 op_add1 tempB res number elsif tempB(0)='0'且number =“0100”then op_add2 op_add1 tempB res number elsif tempB(0 )='0'和number =“1000”然后op_add2 op_add1 tempB answers 如果是,那么res res res else res res end; 万一; 结束过程;结束行为; 下面的代码是我的随身携带加法器 库IEEE;使用IEEE.STD_LOGIC_1164.ALL;使用IEEE.STD_LOGIC_ARITH.ALL;使用IEEE.STD_LOGIC_UNSIGNED.ALL; ----如果在此代码中实例化----任何Xilinx原语,则取消注释以下库声明.-- library UNISIM ; - 使用UNISIM.VComponents.all;实体cla_adder是端口(opA:在STD_LOGIC_VECTOR(3 downto 0); opB:在STD_LOGIC_VECTOR(3 downto 0); carry_in:在STD_LOGIC中; sum:out STD_LOGIC_VECTOR(3 downto 0); carry_out:out STD_LOGIC); end cla_adder; architecture cla_adder的行为是SIGNAL s0,s1,s2,s3:STD_LOGIC; SIGNAL g0,g1,g2,g3:STD_LOGIC; SIGNAL p0,p1,p2,p3:STD_LOGIC; SIGNAL c0,c1,c2,c3:STD_LOGIC;开始s0 g0 p0 c0 s1 g1 p1 c1 s2 g2 p2 c2 s3 g3 p3 c3 sum carry_out end Behavioral; ----下面这段代码是我的移位器 库IEEE;使用IEEE.STD_LOGIC_1164.ALL;使用IEEE.STD_LOGIC_ARITH.ALL;使用IEEE.STD_LOGIC_UNSIGNED.ALL; ----如果在此代码中实例化----任何Xilinx原语,则取消注释以下库声明.-- library UNISIM ; - 使用UNISIM.VComponents.all;实体移位器是端口(rst:在STD_LOGIC中; op1:在STD_LOGIC_VECTOR中(3 downto 0); op2:在STD_LOGIC_VECTOR中(3 downto 0); out1:out STD_LOGIC_VECTOR(3 downto 0); out2:out STD_LOGIC_VECTOR(3 downto 0); din:在STD_LOGIC中); end shifter;架构移位器的行为是信号temp1:STD_LOGIC_VECTOR(3 downto 0); signal temp2:STD_LOGIC_VECTOR(3 downto 0);如果din ='0'则开始进程(din,rst)然后temp1 temp2 temp2(0)temp1(0)out2 out1 else temp2(0)temp1(0)out2 out1 end if ; 如果rst ='1'则out2 out1结束if; 结束过程; 结束行为; 以上来自于谷歌翻译 以下为原文 My code below has an undefined output. Could anyone please tell me what the problem is. Also, I would like to ask for advices for my code to be synthesizable in xilinx when you post-simulate it.Thank You. library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity multiplier is Port ( clk : in STD_LOGIC; rst : in STD_LOGIC; en : in STD_LOGIC; opA : in STD_LOGIC_VECTOR (3 downto 0); opB : in STD_LOGIC_VECTOR (3 downto 0); res : out STD_LOGIC_VECTOR (7 downto 0); done : out STD_LOGIC); end multiplier; architecture Behavioral of multiplier is SIGNAL tempA,tempB,number : STD_LOGIC_VECTOR(3 downto 0); SIGNAL answer : STD_LOGIC_VECTOR(7 downto 0); COMPONENT cla_adder PORT ( opA : IN std_logic_vector (3 downto 0); opB : IN std_logic_vector (3 downto 0); carry_in : IN STD_LOGIC; sum : OUT std_logic_vector (3 downto 0); carry_out : OUT STD_LOGIC ); END COMPONENT; COMPONENT shifter PORT ( rst : IN std_logic; op1 : IN std_logic_vector(3 downto 0); op2 : IN std_logic_vector(3 downto 0); din : IN std_logic; out1 : OUT std_logic_vector(3 downto 0); out2 : OUT std_logic_vector(3 downto 0) ); END COMPONENT; --Inputs SIGNAL op_add1 : std_logic_vector(3 downto 0); SIGNAL op_add2 : std_logic_vector(3 downto 0); --Outputs SIGNAL sum_add : std_logic_vector(3 downto 0); SIGNAL carry_out_add : std_logic; SIGNAL carry_out2 : std_logic; SIGNAL out_shift1 : std_logic_vector(3 downto 0); SIGNAL out_shift2 : std_logic_vector(3 downto 0); begin adding: cla_adder PORT MAP( opA => op_add1, opB => op_add2, carry_in => '0', sum => sum_add, carry_out => carry_out_add ); shifting: shifter PORT MAP( rst => rst, op1 => sum_add, op2 => tempB, out1 => out_shift1, out2 => out_shift2, din => carry_out_add ); process (rst,clk,en,tempB,number,out_shift1,out_shift2,op_add1,op_add2,carry_out_add) begin if clk'event and clk = '1' then if rst = '1' then res <= "00000000"; op_add1 <= "0000"; op_add2 <= "0000"; number <= "0000"; done <= '0'; elsif en = '1' then tempA <= opA; tempB <= opB; elsif tempB(0) = '1' and number = "0000" then op_add2 <= tempA; op_add1 <= out_shift1; tempB <= out_shift2; res <= sum_add & tempB; number <= "0001"; elsif tempB(0) = '1' and number = "0001" then op_add2 <= tempA; op_add1 <= out_shift1; tempB <= out_shift2; res <= sum_add & tempB; number <= "0010"; elsif tempB(0) = '1' and number = "0010" then op_add2 <= tempA; op_add1 <= out_shift1; tempB <= out_shift2; res <= sum_add & tempB; number <= "0100"; elsif tempB(0) = '1' and number = "0100" then op_add2 <= tempA; op_add1 <= out_shift1; tempB <= out_shift2; res <= sum_add & tempB; number <= "1000"; elsif tempB(0) = '1' and number = "1000" then op_add2 <= tempA; op_add1 <= out_shift1; tempB <= out_shift2; answer <= sum_add & tempB; done <= '1'; res <= answer; number <= "1111"; elsif tempB(0) = '0' and number = "0000" then op_add2 <= tempA; op_add1 <= out_shift1; tempB <= out_shift2; res <= sum_add & tempB; number <= "0001"; elsif tempB(0) = '0' and number = "0001" then op_add2 <= tempA; op_add1 <= out_shift1; tempB <= out_shift2; res <= sum_add & tempB; number <= "0001"; elsif tempB(0) = '0' and number = "0010" then op_add2 <= tempA; op_add1 <= out_shift1; tempB <= out_shift2; res <= sum_add & tempB; number <= "0100"; elsif tempB(0) = '0' and number = "0100" then op_add2 <= tempA; op_add1 <= out_shift1; tempB <= out_shift2; res <= sum_add & tempB; number <= "1000"; elsif tempB(0) = '0' and number = "1000" then op_add2 <= tempA; op_add1 <= out_shift1; tempB <= out_shift2; answer <= sum_add & tempB; done <= '1'; res <= answer; number <= "1111"; else res <= answer; end if; end if; end process; end Behavioral; This code below is my carry look ahead adder library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; ---- Uncomment the following library declaration if instantiating ---- any Xilinx primitives in this code. --library UNISIM; --use UNISIM.VComponents.all; entity cla_adder is Port ( opA : in STD_LOGIC_VECTOR (3 downto 0); opB : in STD_LOGIC_VECTOR (3 downto 0); carry_in : in STD_LOGIC; sum : out STD_LOGIC_VECTOR (3 downto 0); carry_out : out STD_LOGIC); end cla_adder; architecture Behavioral of cla_adder is SIGNAL s0,s1,s2,s3 : STD_LOGIC; SIGNAL g0,g1,g2,g3 : STD_LOGIC; SIGNAL p0,p1,p2,p3 : STD_LOGIC; SIGNAL c0,c1,c2,c3 : STD_LOGIC; begin s0 <= opA(0) XOR opB(0) XOR carry_in; g0 <= opA(0) AND opB(0); p0 <= opA(0) OR opB(0); c0 <= g0 OR (p0 AND carry_in); s1 <= opA(1) XOR opB(1) XOR c0; g1 <= opA(1) AND opB(1); p1 <= opA(1) OR opB(1); c1 <= g1 OR (p1 AND c0); s2 <= opA(2) XOR opB(2) XOR c1; g2 <= opA(2) AND opB(2); p2 <= opA(2) OR opB(2); c2 <= g2 OR (p2 AND c1); s3 <= opA(3) XOR opB(3) XOR c2; g3 <= opA(3) AND opB(3); p3 <= opA(3) OR opB(3); c3 <= g3 OR (p3 AND c2); sum <= s3 & s2 & s1 & s0; carry_out <= c3; end Behavioral; ----this code below is my shifter library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; ---- Uncomment the following library declaration if instantiating ---- any Xilinx primitives in this code. --library UNISIM; --use UNISIM.VComponents.all; entity shifter is Port ( rst : in STD_LOGIC; op1 : in STD_LOGIC_VECTOR (3 downto 0); op2 : in STD_LOGIC_VECTOR (3 downto 0); out1 : out STD_LOGIC_VECTOR (3 downto 0); out2 : out STD_LOGIC_VECTOR (3 downto 0); din : in STD_LOGIC); end shifter; architecture Behavioral of shifter is signal temp1 : STD_LOGIC_VECTOR (3 downto 0); signal temp2 : STD_LOGIC_VECTOR (3 downto 0); begin process(din,rst) begin if din = '0' then temp1 <= op1; temp2 <= op2; temp2(0) <= op2(1); temp2(1) <= op2(2); temp2(2) <= op2(3); temp2(3) <= op1(0); temp1(0) <= op1(1); temp1(1) <= op1(2); temp1(2) <= op1(3); temp1(3) <= '0'; out2 <= temp2; out1 <= temp1; else temp2(0) <= op2(1); temp2(1) <= op2(2); temp2(2) <= op2(3); temp2(3) <= op1(0); temp1(0) <= op1(1); temp1(1) <= op1(2); temp1(2) <= op1(3); temp1(3) <= '1'; out2 <= temp2; out1 <= temp1; end if; if rst = '1' then out2 <= "0000"; out1 <= "0000"; end if; end process; end Behavioral; |
|
相关推荐
3个回答
|
|
嗨Adrialex,
要确定您的代码是否是可综合的,您可以尝试使用ise,或者如果使用modelsim进行模拟,则可以在模型上使用-comck_synthesis选项和vcom。 关于你的代码的一些问题:你为什么这么复杂? 例如 移位器: 如果你真的想用res输入将输出固定为“0000”,那么好吧。 但为什么? 它只是一个组合电路。 为什么你总是分别操纵每个位并使用如此多的临时信号? 无用的赋值:temp1无用的赋值:temp2 |
|
|
|
我编辑了我的乘数代码并得到了这段代码。
我仍然有一个未定义的输出。 是因为我分配值或我的组件的时机? 我没有编辑我的组件,因为我会在包括它们在内的其他程序中更改大量代码。 我的代码听起来不错? 请告诉我这个问题。 谢谢。 库IEEE;使用IEEE.STD_LOGIC_1164.ALL;使用IEEE.STD_LOGIC_ARITH.ALL;使用IEEE.STD_LOGIC_UNSIGNED.ALL;实体乘数是端口(clk:在STD_LOGIC中; rst:在STD_LOGIC中; en:在STD_LOGIC中; opA:在STD_LOGIC_VECTOR中(3) downto 0); opB:在STD_LOGIC_VECTOR(3 downto 0); res:out STD_LOGIC_VECTOR(7 downto 0);完成:out STD_LOGIC);结束乘数;架构乘数的行为是SIGNAL tempA,tempB,tempC:STD_LOGIC_VECTOR(3 downto 0 ); SIGNAL cstate,nstate:STD_LOGIC_VECTOR(2 downto 0); SIGNAL回答:STD_LOGIC_VECTOR(7 downto 0); COMPONENT cla_adder PORT(opA:IN std_logic_vector(3 downto 0); opB:IN std_logic_vector(3 downto 0); carry_in:IN STD_LOGIC; sum:OUT std_logic_vector(3 downto 0); carry_out:OUT STD_LOGIC); 结束组成部分; COMPONENT移位器PORT(rst:IN std_logic; op1:IN std_logic_vector(3 downto 0); op2:IN std_logic_vector(3 downto 0); din:IN std_logic; out1:OUT std_logic_vector(3 downto 0); out2:OUT std_logic_vector(3 downto 0)); 结束组成部分; --Inputs SIGNAL op_add1:std_logic_vector(3 downto 0); SIGNAL op_add2:std_logic_vector(3 downto 0); - 输出SIGNAL sum_add:std_logic_vector(3 downto 0); SIGNAL carry_out_add:std_logic; SIGNAL carry_out2:std_logic; SIGNAL out_shift1:std_logic_vector(3 downto 0); SIGNAL out_shift2:std_logic_vector(3 downto 0); 开始添加:cla_adder PORT MAP(opA => op_add1,opB => op_add2,carry_in =>'0',sum => sum_add,carry_out => carry_out_add); 移位:移位器端口映射(rst => rst,op1 => sum_add,op2 => tempB,out1 => out_shift1,out2 => out_shift2,din => carry_out_add); 更改:进程(rst,clk,en)开始如果rst ='1'然后cstate res完成op_add1 op_add2 elsif en ='1'然后tempA tempB否则如果clk'event和clk ='1'则cstate结束if; 万一; 结束过程; 实例:进程(cstate,tempA,tempB,tempC,out_shift1,out_shift2)begin case cstate是“000”=>如果tempB(0)='1'则op_add2 tempB tempC nstate res else op_add2 tempB tempC nstate res end if; 当“001”=>如果tempB(0)='1'则op_add2 tempB tempC nstate res else op_add2 tempB tempC nstate res end if; 当“010”=>如果tempB(0)='1'则op_add2 tempB tempC nstate res else op_add2 tempB tempC nstate res end if; 当“011”=>如果tempB(0)='1'则op_add2 tempB tempC nstate res else op_add2 tempB tempC nstate res end if; 当别人=> res end case; 结束过程;结束行为; 以上来自于谷歌翻译 以下为原文 I edited my multiplier code and had this code. I still have an undefined output. Is it because of my timing on assigning values or my components? I didn't edit my components because I would change a great deal of code in my other programs including them. Is my code sound? Please tell me the problem. Thank You. library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity multiplier is Port ( clk : in STD_LOGIC; rst : in STD_LOGIC; en : in STD_LOGIC; opA : in STD_LOGIC_VECTOR (3 downto 0); opB : in STD_LOGIC_VECTOR (3 downto 0); res : out STD_LOGIC_VECTOR (7 downto 0); done : out STD_LOGIC); end multiplier; architecture Behavioral of multiplier is SIGNAL tempA,tempB,tempC : STD_LOGIC_VECTOR(3 downto 0); SIGNAL cstate,nstate : STD_LOGIC_VECTOR(2 downto 0); SIGNAL answer : STD_LOGIC_VECTOR(7 downto 0); COMPONENT cla_adder PORT ( opA : IN std_logic_vector (3 downto 0); opB : IN std_logic_vector (3 downto 0); carry_in : IN STD_LOGIC; sum : OUT std_logic_vector (3 downto 0); carry_out : OUT STD_LOGIC ); END COMPONENT; COMPONENT shifter PORT ( rst : IN std_logic; op1 : IN std_logic_vector(3 downto 0); op2 : IN std_logic_vector(3 downto 0); din : IN std_logic; out1 : OUT std_logic_vector(3 downto 0); out2 : OUT std_logic_vector(3 downto 0) ); END COMPONENT; --Inputs SIGNAL op_add1 : std_logic_vector(3 downto 0); SIGNAL op_add2 : std_logic_vector(3 downto 0); --Outputs SIGNAL sum_add : std_logic_vector(3 downto 0); SIGNAL carry_out_add : std_logic; SIGNAL carry_out2 : std_logic; SIGNAL out_shift1 : std_logic_vector(3 downto 0); SIGNAL out_shift2 : std_logic_vector(3 downto 0); begin adding: cla_adder PORT MAP( opA => op_add1, opB => op_add2, carry_in => '0', sum => sum_add, carry_out => carry_out_add ); shifting: shifter PORT MAP( rst => rst, op1 => sum_add, op2 => tempB, out1 => out_shift1, out2 => out_shift2, din => carry_out_add ); changes : process(rst,clk,en) begin if rst = '1' then cstate <= "000"; res <= "00000000"; done <= '0'; op_add1 <= "0000"; op_add2 <= "0000"; elsif en = '1' then tempA <= opA; tempB <= opB; else if clk'event and clk = '1' then cstate <= nstate; end if; end if; end process; instances : process(cstate,tempA,tempB,tempC,out_shift1,out_shift2) begin case cstate is when "000" => if tempB(0) = '1' then op_add2 <= tempA; tempB <= out_shift2; tempC <= out_shift1; nstate <= "001"; res <= tempC & tempB; else op_add2 <= tempA; tempB <= out_shift2; tempC <= out_shift1; nstate <= "001"; res <= tempC & tempB; end if; when "001" => if tempB(0) = '1' then op_add2 <= tempA; tempB <= out_shift2; tempC <= out_shift1; nstate <= "010"; res <= tempC & tempB; else op_add2 <= tempA; tempB <= out_shift2; tempC <= out_shift1; nstate <= "010"; res <= tempC & tempB; end if; when "010" => if tempB(0) = '1' then op_add2 <= tempA; tempB <= out_shift2; tempC <= out_shift1; nstate <= "011"; res <= tempC & tempB; else op_add2 <= tempA; tempB <= out_shift2; tempC <= out_shift1; nstate <= "011"; res <= tempC & tempB; end if; when "011" => if tempB(0) = '1' then op_add2 <= tempA; tempB <= out_shift2; tempC <= out_shift1; nstate <= "100"; res <= tempC & tempB; else op_add2 <= tempA; tempB <= out_shift2; tempC <= out_shift1; nstate <= "100"; res <= tempC & tempB; end if; when others => res <= tempC & tempB; end case; end process; end Behavioral; |
|
|
|
嗨adrialex,
FSM-Part现在看起来好多了。 我只是想知道你为什么要对tempB(0)='1'和else分支做同样的事情? 当你进入状态100时,案例进入“其他”分支并停在那里,所以你的乘法器只工作一次(你也没有使用完成信号)。 如果使用EN作为乘法器的启用,则会阻止顺序操作。 (在EN变为非活动状态之前,clk'event分支不会运行。不合逻辑。) 您将在两个进程中分配信号res。 多个驱动问题。 不会合成! 对于op_add2也是如此。 op_add1始终为“0000”。 状态寄存器过程中唯一的时钟分配是cstate,因此在那里重置/预置其他信号是无用的(如果没有危险)。 你的cla-adder和shifter是组合电路和你的FSM的案例过程。 那么中间结果将存储在哪里? 没有登记册。 如果工具创建锁存器或组合环,您将不会高兴。 所以,你的代码现在看起来更好,但是(很抱歉这么说)非常糟糕。 重新思考你的建筑。 RTL设计意味着:您需要在数据路径中的某个位置注册。 加法器的执行信号会发生什么? 你把它作为Din送进你的变速器? 你的Shifter的下半部分有什么用处? (不会称之为移位寄存器,因为它没有时钟) 您总是使用加法器结果覆盖它。 移位器下部没有反馈。 你的算法是什么? 你总是在增加和转移。 这对我来说似乎不对。 您应该绘制一个草图,说明信号如何流动以及每个时钟周期必须执行哪些操作。 有一个很好的综合 Eilert 以上来自于谷歌翻译 以下为原文 Hi adrialex, The FSM-Part looks much better now. I just wonder why you are doing the same things for tempB(0) = '1'and the else branch? When you enter State 100 the case goes into the 'others' branch and stops there, so your multiplyer is only working once (you also didn't use the done signal). If you are using EN as a enable for the multiplyer, it would block the sequential operation. (The clk'event branch won't run until EN becomes inactive. Unlogical.) You are assigning to signal res in two processes. Multiple driver problem. Won't synthesize! Same for op_add2. op_add1 is always "0000". The only clocked assignment in your state-register process is cstate, so it's useless (if not dangerous) to reset/preset other signals there. Your cla-adder and shifter are combinatorical circuits and the case-process of your FSM too. So where will the intermediate results be stored? No registers. You won't be happy if the tool creates latches or combinatorical loops. So, your code looks nicer now, but is (sorry to say so) quite crappy. Rethink your architecture. RTL Design means: You need registers somewhere in your datapath. What's happening with the carry out signal of the adder? You are feeding it into your shifter as Din? What is the lower part of your Shifter good for? (won't call it shift register, cause it has no clock) You are always overwriting it with the adder result. There's no feedback of the shifters lower part. What is your algorithm anyway? You are always adding and shifting. This seems wrong to me. You should draw yourself a sketch of how the signals are flowing and what operations have to be done on each clock cycle. Have a nice synthesis Eilert |
|
|
|
只有小组成员才能发言,加入小组>>
2406 浏览 7 评论
2816 浏览 4 评论
Spartan 3-AN时钟和VHDL让ISE合成时出现错误该怎么办?
2285 浏览 9 评论
3366 浏览 0 评论
如何在RTL或xilinx spartan fpga的约束文件中插入1.56ns延迟缓冲区?
2451 浏览 15 评论
有输入,但是LVDS_25的FPGA内部接收不到数据,为什么?
862浏览 1评论
请问vc707的电源线是如何连接的,我这边可能出现了缺失元件的情况导致无法供电
567浏览 1评论
求一块XILINX开发板KC705,VC707,KC105和KCU1500
421浏览 1评论
1994浏览 0评论
717浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-14 04:51 , Processed in 1.255266 second(s), Total 81, Slave 65 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号