truncation &時鐘控制加法器
时间:10-02
整理:3721RD
点击:
小弟是vhdl初學者,資質拙劣還請各位海涵。
1.truncation 2.時鐘控制加法器
近期研究主題是實現全數位的MASH(多級雜訊整形),其中包含了上述兩點問題
該如何以vhdl實現是我遇到的瓶頸,還請多多指教。
1.truncation 舉例輸入一11bit信號,輸出要分作4bit MSB與7bit LSB信號
我的想法如下,殊不知出了什麼紕漏否?
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY trunc IS
PORT( input :IN STD_LOGIC_VECTOR(10 DOWNTO 0);
msb :OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
lsb :OUT STD_LOGIC_VECTOR(6 DOWNTO 0);
END trunc;
ARCHITECTURE aa OF trunc IS
BEGIN
msb(3 DOWNTO 0) <= input(10 DOWNTO 7);
lsb(6 DOWNTO 0) <= input(6 DOWNTO 0);
END aa;
2.時鐘控制加法器:想要加法器在正緣觸發時才進行訊號相加的動作
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity clk_fadd is
port (X,Y,Cin,clk: in std_logic;
Cout,Sum: out std_logic);
end clk_fadd;
architecture logic of clk_fadd is
begin
Sum <= X xor Y xor Cin when clk'event and clk='1';
Cout <= (X and Y) or (X and Cin) or (Y and Cin) when clk'event and clk='1';
end logic;
truncation中msb(3 DOWNTO 0) <= input(11 DOWNTO 7);这一赋值语句的两端位数不一致,左边是4位,右边是5位。
时钟控制加法器中,看上去好像也没有啥问题的,不过你可以尝试一下用进程的方式来写
process(clk)
begin
if clk'event and clk='1' then
Sum <= X xor Y xor Cin;
Cout <= (X and Y) or (X and Cin) or (Y and Cin) ;
end if;
end process;
要是仿真时结果出不来,有可能是因为没有复位信号,输入信号的初始态定不下来,所以结果出不来,届时可在代码中加入复位信号再试试
感謝qlengyu大大不吝指教,第一個部分truncation的位元數是我疏忽打錯了。
時鐘控制加法器的部份我先前亦有試過大大這方法,但出現了我另一篇發文裡頭的錯誤碼。
一度以為我的vhdl程式出了問題,現在看來應該是xilinx需要重灌。
再次感謝qlengyu
