Matrix-Multiply FSMD Start Din WEn WEn Cnt=0 WAddr WAddr Start=0 S1 Sum=0 RegFile RegFile (RFA) (RFB) Rst Start=1 Counter Inc REn REn (Cnt) RAddr RAddr Cnt=63 i j k RFB(j,k)=Din Cnt=0 S3 S2 Cnt = Cnt +1 Rst Rst Reg Reg Ld Ld (A) (B) Cnt<63 A = RFA(i,k) S4 B = RFB(k,j) Comparator Multiplier S5 P=A*B Eq511 Eq63 Rst Reg Controller Ld (P) Sum=P+Sum S6 k=7 k<7 Adder Cnt<511 RFC(i,j)=Sum S7 S8 Sum=0 Cnt=511 Rst Reg Ld (Sum) Cnt = Cnt +1 Cnt=0 S9 Done=1 WEn WAddr RegFile (RFC) Cnt=63 Dout = RFC(j,k) S10 Cnt = Cnt +1 REn RAddr Done Dout Cnt<63
Matrix Storage A (i,k) x B (k,j) 77 j = 0 1 2 3 4 5 6 7 i = 0 76 i = 1 i = 2 i = 3 i = 4 02 i = 5 i = 6 01 i = 7 00 Counter: i j k
Matrix-Multiply Controller Start Din WEn WEn WAddr WAddr Cnt=0 Start=0 RegFile RegFile S1 (RFA) (RFB) Rst Counter Inc REn Start=1 REn (Cnt) RAddr RAddr i j k Cnt=63 Cnt=0 S3 S2 RFB(j,k)=Din, Cnt = Cnt +1 Sum=0 Reg Rst Reg Rst Ld Ld (A) (B) Cnt<63 S4 A = RFA(i,k) (RFA_REn=1, RFA_RAddr=(8i+k), A_Ld=1) Comparator B = RFB(k,j) (RFB_REn=1, RFB_RAddr=(8k+j), B_Ld=1) Multiplier (XXX_WEn=0, Sum_Ld=0, Cnt_Inc=0, . . .) P=A*B (P_Ld-1, XXX_WEn=0, Sum_Ld=0, Cnt_Inc=0,... ) Eq511 Eq63 S5 Rst Reg Controller Ld (P) Sum=P+Sum (Sum_Ld=1, XXX_WEn=0, Cnt_Inc=0, …) S6 k=7 Adder k<7 RFC(i,j)=Sum, Sum = 0 Cnt<511 S7 S8 (RFC_WEn=1, RFC_RAddr=(8i+j), Sum_Rst=1, ...) Rst Reg Ld Cnt=511 (Sum) Cnt = Cnt +1 (Cnt_Inc=1, …) Cnt=0 S9 Done=1 WEn WAddr RegFile (RFC) Cnt=63 Dout = RFC(j,k) REn S10 Cnt = Cnt +1 RAddr Done Dout Cnt<63
WEn WEn WAddr WAddr RegFile RegFile (RFA) (RFB) Rst Cnt<63 Counter Inc REn S4 REn A = RFA(i,k) (RFA_REn=1, RFA_RAddr=(8i+k), A_Ld=1) (Cnt) RAddr RAddr i j k B = RFB(k,j) (RFB_REn=1, RFB_RAddr=(8k+j), B_Ld=1) ( XXX_WEn=0, Sum_Ld=0, Cnt_Inc=0,... ) Rst Rst Reg Reg Ld Ld (A) (B) S5 P=A*B (P_Ld-1, XXX_WEn=0, Sum_Ld=0, Cnt_Inc=0,... ) Comparator Sum=P+Sum (Sum_Ld=1, XXX_WEn=0, Cnt_Inc=0, …) Multiplier S6 Eq511 Eq63 k=7 k<7 Rst Reg RFC(i,j)=Sum, Sum = 0 Ld Cnt<511 (P) S8 S7 (RFC_WEn=1, RFC_RAddr=(8i+j), Sum_Rst=1, ...) Cnt=511 Cnt = Cnt +1 Adder (Cnt_Inc=1, …) Cnt=0 Rst Reg Ld (Sum)
Matrix-Multiply Structure Start Din ENTITY MatrixMult IS WEn WEn WAddr WAddr PORT ( RegFile RegFile Clk : in std_logic; (RFA) (RFB) Rst Counter Inc Start : in std_logic; REn REn (Cnt) RAddr RAddr i j k Din : in INTEGER; Done : out std_logic; Rst Reg Rst Reg Ld Ld Dout : out INTEGER (A) (B) ); END MatMul; Comparator Multiplier BEGIN Eq511 Eq63 ARCHITECTURE MatrixMult_struct OF Sum: Reg PORT MAP ( ……… ); Rst Reg Controller MatrixMult IS Ld (P) A: Reg PORT MAP (…………); B: Reg PORT MAP (…………); COMPONENT Multiplier IS P: Reg PORT MAP (…………); … Adder COMPONENT Adder IS Controller_1: Controller PORT MAP (…………); … COMPONENT Counter IS Rst Reg RFA: RegFile PORT MAP (…………); Ld (Sum) … COMPONENT Comparator IS RFB: RegFile PORT MAP (…………); … COMPONENT Reg is RegFile RFC: RegFile PORT MAP (…………); (RFC) … COMPONENT RegFile IS Counter_1: Counter PORT MAP (…………); … Done Dout COMPONENT Controller IS Comparator_1: Comparator PORT MAP (………); … END COMPONENT; Mult_1: Multiplier PORT MAP (……………); SIGNAL Cnt_Inc, Cnt_Rst, Sum_Ld, Sum_Rst:std_logic; SIGNAL A_Ld, A_Rst, B_Ld, B_Rst:std_logic; Adder_1: Adder PORT MAP (……………); SIGNAL mult_out: INTEGER; SIGNAL adder_out, : INTEGER; SIGNAL i_s, j_s, k_s: std_logic_vector(2 downto 0); END MatrixMult_struct; …
Recommend
More recommend