CAD 宿題 3 クリップ・ラウンド乗算器 035740F 根保光秀 1 MULT の処理のクリップ部の if (var vrnd(9 downto 7) /= (var vrnd(9)&var vrnd(9)&var vrnd(9))) then var vovflo := (7=>var vrnd(9),others=>(not var vrnd(9))); end if; のコードを削除した場合、どのような問題点が生じているか説明 し、それが生じている scirocco シミュレーション波形を示せ。 • scirocco の正常動作波形 図 1: 問題点 scirocco 動作波形 • 問題点の説明 クリップ部の処理を消去しているので、上図のように (-1.0)*(-1.0) の乗算の結果が-1 になっ てしまい、正常に動作していない。 2 前回やった、16ポイント平均回路と、今回の乗算器を用い て、信号パワーを16ポイント平均する回路を設計せよ。以下を 提出せよ。 • 信号入力は < 8, 0, t > であるとして、おおよその信号の平均パワーはいくらか?実数で答え よ。 図 2 の scirocco 波形から REALAVGOUT の値は 0.5 と 0.49 の間を交互に出力しているので おおよその信号の平均パワーは 0.5 である。 1 • scirocco の正常動作波形 図 2: scirocco 動作波形 • なるべくサイクル時間が小さくなるように合成した回路の、回路図、面積レポート、最小サ イクル時間 図 3: 回路図 表 1: レポート Combinational Area 2545 NonCombinational Area 952 Total Cell Area 3497 clock CLK (rise edge) 16.00 data arrival time 15.20 次ページに VHDL 記述を示す。 2 ¶ VHDL 記述 : テストベンチ ³ 1 library STD, IEEE; 2 use STD.TEXTIO.all; 3 use IEEE.std logic 1164.all; 4 use IEEE.std logic textio.all; 5 use IEEE.std logic arith.all; 6 7 entity TESTBENCH MULT is 8 end TESTBENCH MULT; 9 10 architecture SIM DATA of TESTBENCH MULT is 11 12 component MULT 13 port(CLK : in std logic; 14 in1 : in std logic vector(7 downto 0); 15 in2 : in std logic vector(7 downto 0); 16 outp : out std logic vector(7 downto 0); 17 AVGOUT : out std logic vector(7 downto 0)); 18 end component; 19 20 signal FMINPUT : std logic vector(7 downto 0); – <8,0,t> 21 signal MULTOUT : std logic vector(7 downto 0); – <8,0,t> 22 23 signal FMINPUT I : integer; 24 signal FMINPUT R : real; 25 signal FMINPUT R2 : real; 26 signal MULTOUT I : integer; 27 signal MULTOUT R : real; 28 signal MULTOUT R2 : real; 29 signal REALAVGOUT : real; 30 31 signal AVGOUT : std logic vector(7 downto 0); 32 signal CLK : std logic := ’0’; 33 34 begin 35 36 – Sysetem CLK generation 37 CLK <= not CLK after 5 ns; 38 39 – DUT 40 U1: MULT port map (CLK,FMINPUT, FMINPUT, MULTOUT,AVGOUT); 41 42 – TEST VECTOR 43 P1: process 44 file TEST IN : text is in ”fm.txt”; 45 variable LINE IN : line; 46 variable V FMINPUT : std logic vector(7 downto 0); 47 begin 48 readline(TEST IN, LINE IN); 49 read(LINE IN, V FMINPUT); 50 FMINPUT <= V FMINPUT; 51 wait for 10 ns; 52 if endfile(TEST IN) then 53 wait; 54 end if; 55 end process; 56 57 FMINPUT I <= CONV INTEGER(signed(FMINPUT)) ; 58 FMINPUT R <= real(FMINPUT I) /128.0; 59 FMINPUT R2<= real(CONV INTEGER(signed(FMINPUT))) /128.0; 60 MULTOUT I <= CONV INTEGER(signed(MULTOUT)) ; 61 MULTOUT R <= real(MULTOUT I) /128.0; 62 MULTOUT R2<= real(CONV INTEGER(signed(MULTOUT))) /128.0; 63 REALAVGOUT<= real(CONV INTEGER(signed(AVGOUT)))/128.0; 64 65 end SIM DATA; 66 67 configuration CFG MULT of TESTBENCH MULT is 68 for SIM DATA 69 end for; 70 end CFG MULT; µ ´ 3 ¶ VHDL 記述 : mult.vhd ³ 1 library IEEE; 2 use IEEE.STD LOGIC 1164.all; 3 use IEEE.STD LOGIC ARITH.all; 4 5 entity MULT is 6 port(CLK : in std logic; 7 in1 : in std logic vector(7 downto 0); 8 in2 : in std logic vector(7 downto 0); 9 outp : out std logic vector(7 downto 0); 10 AVGOUT : out std logic vector(7 downto 0)); 11 end MULT; 12 13 architecture RTL of MULT is 14 –subtype JK is std logic vector(7 to 0); 15 –type F is array ( 0 to 15 ) of JK; 16 –signal FF : F; 17 signal FF1, FF2, FF3, FF4,FF5,FF6,FF7,FF8,FF9,FF10,FF11,FF12,FF13,FF14,FF15,FF16 : std logic vector(7 downto 0); 18 signal SUM : std logic vector(11 downto 0); 19 begin 20 21 – SIGNED CLIP ROUND MULTIPLIER 22 – in1 <8,0,t> 23 – in2 <8,0,t> 24 – outp <8,0,t> 25 MULT : process(in1,in2,CLK) 26 variable var outp : std logic vector(7 downto 0); – <8,0,t> 27 variable var tprod : std logic vector(15 downto 0); – <16,1,t> 28 variable var vtrun : std logic vector(8 downto 0); – <9,1,t> 29 variable var rndbit : std logic; – <1,1,u> 30 variable var vext : std logic vector(9 downto 0); – <10,2,t> 31 variable var vext 1 : std logic vector(9 downto 0); – <10,2,t> 32 variable var tinc : std logic vector(9 downto 0); – <10,2,t> 33 variable var vrnd : std logic vector(9 downto 0); – <10,2,t> 34 variable var vovflo : std logic vector(7 downto 0); – <8,0,t> 35 begin 36 var tprod := signed(in1) * signed(in2); 37 var vtrun := var tprod(15 downto 7); 38 – ROUND 39 var rndbit := ’0’; 40 if (var tprod(6) = ’1’) then 41 var rndbit := ’1’; 42 end if; 43 var vext := var vtrun(8) & var vtrun; 44 var vext 1 := var vtrun(8) & var vtrun; 45 var tinc := signed(var vext 1) + ’1’; 46 if (var rndbit = ’1’) then 47 var vrnd := var tinc; 48 else 49 var vrnd := var vext; 50 end if; 51 – CLIP (IF OVERFLOW then take MAXVALUE) 52 – (IF UNDERFLOW then take MINVALUE) 53 var vovflo := var vrnd(7 downto 0); 54 if (var vrnd(9 downto 7) /= (var vrnd(9)&var vrnd(9)&var vrnd(9))) then 55 var vovflo := (7=>var vrnd(9),others=>(not var vrnd(9))); 56 end if; 57 58 –平均を求める 59 if (CLK’event and CLK = ’1’) then 60 FF1 <= var vovflo; 61 FF2 <= FF1; 62 FF3 <= FF2; 63 FF4 <= FF3; 64 FF5 <= FF4; 65 FF6 <= FF5; 66 FF7 <= FF6; 67 FF8 <= FF7; 68 FF9 <= FF8; 69 FF10 <= FF9; 70 FF11 <= FF10; 71 FF12 <= FF11; 72 FF13 <= FF12; 73 FF14 <= FF13; 74 FF15 <= FF14; 75 FF16 <= FF15; 76 end if; 77 78 – generate output 79 var outp := var vovflo; 80 outp <= var outp; 81 end process MULT; 82 83 SUM <= signed(FF1(7)&FF1(7)&FF1(7)&FF1(7)&FF1)+signed(FF2(7)&FF2(7)&FF2(7)&FF2(7)&FF2) 84 +signed(FF3(7)&FF3(7)&FF3(7)&FF3(7)&FF3)+signed(FF4(7)&FF4(7)&FF4(7)&FF4(7)&FF4) 85 +signed(FF5(7)&FF5(7)&FF5(7)&FF5(7)&FF5)+signed(FF6(7)&FF6(7)&FF6(7)&FF6(7)&FF6) 86 +signed(FF7(7)&FF7(7)&FF7(7)&FF7(7)&FF7)+signed(FF8(7)&FF8(7)&FF8(7)&FF8(7)&FF8) 87 +signed(FF9(7)&FF9(7)&FF9(7)&FF9(7)&FF9)+signed(FF10(7)&FF10(7)&FF10(7)&FF10(7)&FF10) 88 +signed(FF11(7)&FF11(7)&FF11(7)&FF11(7)&FF11)+signed(FF12(7)&FF12(7)&FF12(7)&FF12(7)&FF12) 89 +signed(FF13(7)&FF13(7)&FF13(7)&FF13(7)&FF13)+signed(FF14(7)&FF14(7)&FF14(7)&FF14(7)&FF14) 90 +signed(FF15(7)&FF15(7)&FF15(7)&FF15(7)&FF15)+signed(FF16(7)&FF16(7)&FF16(7)&FF16(7)&FF16); 91 92 process(CLK) begin 93 if (CLK’event and CLK=’1’) then 94 AVGOUT <= SUM(11 downto 4); 95 end if; 96 end process; 97 end RTL; µ ´ 4
© Copyright 2024 ExpyDoc