1 引言
  隨著åŠå°Ž(dÇŽo)體技術(shù)的發(fÄ)展,å¯ç·¨ç¨‹é‚輯器件在çµ(jié)æ§‹(gòu)ã€å·¥è—ã€é›†æˆåº¦ã€åŠŸèƒ½ã€é€Ÿåº¦å’Œéˆæ´»æ€§ç‰æ–¹é¢æœ‰äº†å¾ˆå¤§çš„æ”¹é€²(jìn)å’Œæé«˜ï¼Œå¾žè€Œç‚ºé«˜æ•ˆçއã€é«˜è³ª(zhì)é‡ã€éˆæ´»åœ°è¨(shè)計數(shù)å—系統(tÇ’ng)æä¾›äº†å¯é 性。CPLD或FPGA技術(shù)的出ç¾(xià n),為DSP系統(tÇ’ng)çš„è¨(shè)è¨ˆåˆæä¾›äº†ä¸€ç¨®å¶„æ–°çš„æ–¹æ³•ã€‚åˆ©ç”¨CPLD或FPGAè¨(shè)計的DSP系統(tÇ’ng)å…·æœ‰è‰¯å¥½çš„éˆæ´»æ€§å’Œæ¥µå¼·(qiáng)çš„å¯¦æ™‚æ€§ã€‚åŒæ™‚ï¼Œå…¶åƒ¹æ ¼åˆå¯ä»¥è¢«å¤§çœ¾æŽ¥å—。由于乘法器在數(shù)å—信號處ç†ç³»çµ±(tÇ’ng)ä¸å…·æœ‰å»£æ³›çš„æ‡‰(yÄ«ng)用,所以本文以乘法器的處ç†ç³»çµ±(tÇ’ng)ä¸å…·æœ‰å»£æ³›çš„æ‡‰(yÄ«ng)用,所以本文以乘法器的è¨(shè)計為例,來說明采用å¯ç·¨ç¨‹é‚輯器件è¨(shè)計數(shù)å—系統(tÇ’ng)的方法。如果想使系統(tÇ’ng)具有較快的工作速度,å¯ä»¥é‡‡ç”¨çµ„åˆé‚輯電路構(gòu)æˆçš„乘法器,但是,這樣的乘法器需å 用大é‡çš„硬件資æºï¼Œå› 而很難實ç¾(xià n)寬ä½ä¹˜æ³•器功能。本文這種用于åºé‚輯電路構(gòu)æˆçš„乘法器,既節(jié)çœäº†èŠ¯ç‰‡è³‡æºï¼Œåˆèƒ½æ»¿è¶³å·¥ä½œé€Ÿåº¦åŠåŽŸç†çš„è¦æ±‚ï¼Œå› è€Œå…·æœ‰ä¸€å®šçš„å¯¦ç”¨åƒ¹å€¼ã€‚
 
 2 系統(tÇ’ng)æ§‹(gòu)æˆ
  該乘法器通éŽé€é …ç§»ä½ç›¸åР來坦ç¾(xià n)乘法功能。它從被乘數(shù)的最低開始,若為1,則乘數(shù)左移åŽå†èˆ‡ä¸Šä¸€æ¬¡çš„å’Œç›¸åŠ ï¼›è‹¥ç‚º0,左移åŽèˆ‡0ç›¸åŠ ï¼Œç›´åˆ°ç§»åˆ°è¢«ä¹˜æ•¸(shù)的最高ä½ã€‚圖1是該乘法器的系統(tÇ’ng)çµ„æˆæ¡†åœ–。該控制模塊的STAR輸入有兩個功能: [table][tr][td][/td][/tr][/table]第一個功能是將16ä½ç§»ä½å¯„å˜å™¨æ¸…零和被乘數(shù)A[7…0]å‘8ä½ç§»ä½å¯„å˜å™¨åŠ è¼‰ï¼›ç¬¬äºŒå€‹åŠŸèƒ½ç‚ºè¼¸å…¥ä¹˜æ³•ä½¿èƒ½ä¿¡è™Ÿã€‚ä¹˜æ³•æ™‚é˜ä¿¡è™Ÿå¾žCLK輸入,當(dÄng)被乘數(shù)åŠ è¼‰äºŽ8ä½ç§»ä½å¯„å˜å™¨åŽï¼Œå®ƒç”±ä½Žä½åˆ°é«˜ä½é€ä½ç§»å‡ºï¼Œç•¶(dÄng)QB=1時,é¸é€šæ¨¡å¡Šæ‰“開,8ä½ä¹˜æ•¸(shù)B[8…0]被é€å…¥åŠ æ³•å™¨ï¼Œå¹¶èˆ‡ä¸Šä¸€æ¬¡éŽ–å˜åœ¨16ä½éŽ–å˜å™¨ä¸çš„高8ä½ç›¸åŠ ï¼Œå…¶å’Œåœ¨ä¸‹ä¸€å€‹æ™‚é˜ä¸Šå‡æ²¿è¢«éŽ–å˜åˆ°éŽ–å˜å™¨å…§(nèi);當(dÄng)QB=0時,é¸é€šæ¨¡å¡Šè¼¸å‡ºç‚ºå…¨0。如æ¤å¾ªç’°(huán)8個時é˜è„ˆæ²–åŽï¼Œç”±æŽ§åˆ¶æ¨¡å¡ŠæŽ§åˆ¶çš„乘法é‹ç®—éŽç¨‹è‡ªå‹•䏿¢ã€‚è©²ä¹˜æ³•å™¨çš„æ ¸å¿ƒå…ƒä»¶æ˜¯8ä½åŠ æ³•å™¨ï¼Œå…¶é‹ç®—é€Ÿåº¦å–æ±ºäºŽæ™‚é˜é »çŽ‡ã€‚

 
 3 åŠ æ³•å™¨çš„å¯¦ç¾(xià n)
ã€€ã€€åŠ æ³•å™¨çš„è¨(shè)計需è¦è€ƒæ…®è³‡æºåˆ©ç”¨çŽ‡å’Œé€²(jìn)ä½é€Ÿåº¦é€™å…©å€‹ç›¸äº’矛盾的å•題,通常å–兩個å•題的折衷。多ä½åŠ æ³•å™¨çš„æ§‹(gòu)æˆæœ‰å¹¶è¡Œé€²(jìn)ä½å’Œä¸²è¡Œé€²(jìn)ä½å…©æ–¹å¼ï¼Œå‰è€…é‹ç®—速度快,但需å 用較多的硬件資æºï¼Œè€Œä¸”éš¨è‘—ä½æ•¸(shù)çš„å¢žåŠ ï¼Œç›¸åŒä½æ•¸(shù)çš„å¹¶è¡ŒåŠ æ³•å™¨å’Œä¸²è¡ŒåŠ æ³•å™¨çš„ç¡¬ä»¶è³‡æºå 用差è·å¿«é€Ÿå¢žå¤§ã€‚實è¸è‰æ˜Žï¼Œ4ä½äºŒé€²(jìn)åˆ¶å¹¶è¡ŒåŠ æ³•å™¨å’Œä¸²è¡ŒåŠ æ³•å™¨å 用的資æºå¹¾ä¹Žç›¸åŒï¼Œå› æ¤ï¼Œç”±4ä½äºŒé€²(jìn)åˆ¶å¹¶è¡ŒåŠ æ³•å™¨ç´šè¯(lián)來構(gòu)æˆå¤šä½åŠ æ³•å™¨æ˜¯è¼ƒå¥½çš„æŠ˜è¡·é¸æ“‡ã€‚以下為由兩個4ä½äºŒé€²(jìn)åˆ¶å¹¶è¡ŒåŠ æ³•å™¨ç´šè¯(lián)æ§‹(gòu)æˆ8ä½äºŒé€²(jìn)åˆ¶åŠ æ³•å™¨çš„ VHDL程åºï¼š
  LIBRARY IEEE;
  USE IEEE.STD_LOGIC_1164.ALL;
  USE IEEE.STD_LOGIC_UNSIGNED.ALL;
  ENTITY ADDER8B IS
  PORT (CIN:IN STD_LOGIC;
  A :IN STD_LOGIC_VECTOR(7 DOWNTO 0);
  B :IN STD_LOGIC_VECTOR(7 DOWNTO 0);
  S :OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
  OUT :OUT STD_LOGIC);
  END ADDER8B;
  ARCHITECTURE struc OF ADDER8B IS
  COMPONENT ADDER4B
  PORT (CIN4: IN STD_LOGIC;
  A4 : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
  B4 :IN STD_LOGIC_VECTOR(3 DOWNTO 0);
  S4 : OUT ST_D_LOGIC_VECTOR(3 DOWN-TO 0);
  COUT4 : OUT STD_LOGIC);
  END COMPONENT;
  SIGNAL CARRY_OUT : STD_LOGIC;
  BEGIN
  U1:ADDER4B
  PORT MAP(CIN4=>CIN,A4=>A(3 DOWNTO 0),B4=>B(3 DOWNTO 0),S4=>S(3 DOWNTO 0),COUT4=>CARRY_OUT);
  U2 :ADDER4B
  PORT MAP(CIN4=>CARRY_OUT,A4=>A(7 DOWNTO 4),B4=>B(7 DOWNTO 4),S4=>S(7 DOWNTO 4),COUT4=>COUT);
  END struc;
  在上é¢çš„VHDLæè¿°ä¸ï¼ŒADDER4B是一個4ä½äºŒé€²(jìn)åˆ¶åŠ æ³•å™¨ï¼Œå…¶VHDLæè¿°æ˜¯ï¼š
  LIBRARY IEEE;
  USE IEEE.STD_LOGIC_1164.ALL;
  USE IEEE.STD_LOGIC_UNSIGNED.ALL;
  ENTITY ADDER4B IS
  PORT (CIN4 :IN STD_LOGIC;
  A4 :IN STD_LOGIC_VECTOR(3 DOWNTO 0);
  B4:IN STD_LOGIC_VECTOR(3 DOWNTO 0);
  S4:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
  COUT4:OUT STD_LOGIC;
  EAND ADDER4B;
  ARCHITEC_TURE behav OF ADDER4B IS
  SIGNAL SINT :STD_LOGIC_VECTOR(4 DOWNTO 0);
  SIGNAL AA,BB:STD_LOGIC_VECTOR(4 DOWNTO 0);
  BEGIN
  AA<=‘0’&A4;
  BB<=‘0’&B4;
  SINT<=AA+BB+CIN4;
  S4<=SINT(3 DOWNTO 0);
  COUT4<=SINT(4);
  END behav;
  
4 çµ(jié)æŸèªž
  本文采用基于EDA技術(shù)的自上而下的系統(tÇ’ng)è¨(shè)計方法,其è¨(shè)計æµç¨‹å¦‚圖2所示。該乘 [table][tr][td][/td][/tr][/table]法器的最大優(yÅu)點是節(jié)çœèŠ¯ç‰‡è³‡æºï¼Œå…¶é‹ç®—é€Ÿåº¦å–æ±ºäºŽè¼¸å…¥çš„æ™‚é˜é »çŽ‡ã€‚å¦‚è‹¥æ™‚é˜é »çŽ‡ç‚º100MHz,則æ¯å€‹é‹ç®—周期僅需80nsï¼Œå› è€Œå…·æœ‰ä¸€å®šçš„å¯¦ç”¨åƒ¹å€¼ã€‚