eda課程設計--2位十進制四則運算器電路_第1頁
已閱讀1頁,還剩14頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、<p><b>  《電子設計自動化》</b></p><p><b>  課程設計</b></p><p>  題目: 2位十進制四則運算器電路 </p><p>  院(系) </p><p>  專 業(yè) </p>

2、<p>  屆 別 </p><p>  班 級 </p><p>  學 號 </p><p>  姓 名 </p><p>  任課老師

3、 </p><p><b>  摘要</b></p><p>  本次設計的目的是通過QuartusII軟件實現(xiàn)輸入兩個2位十進制數(shù)(0~99),輸出它們的四則運算(加減乘除)結果(發(fā)光二極管顯示運算模式;調用LPM_MULT、LPM_CONSTANT及LPM_DIVIDE模塊)。實現(xiàn)的方法是利用四則運算的規(guī)律進行初步設計,然后進行調整和修改。最終結果要

4、求:隨機的輸入兩個數(shù),經過加法、減法、乘法和除法的運算,可以得到正確的運算結果。</p><p>  主要分為4大部分:一、2位十進制數(shù)模塊;二、加減乘除四則運算四個小模塊;三、加減乘除四則運算的選擇模塊;四、處理輸出結果的模塊。</p><p><b>  目 錄</b></p><p><b>  1 系統(tǒng)設計4</b&

5、gt;</p><p>  2 單元電路設計 5 </p><p><b>  3 軟件設計 5</b></p><p><b>  4 系統(tǒng)測試14</b></p><p><b>  5 結  論14</b></p><p><b>

6、;  6 參考文獻14</b></p><p><b>  1、系統(tǒng)設計</b></p><p><b>  設計要求:</b></p><p>  輸入兩個2位十進制數(shù)(0~99),輸出它們的四則運算(加減乘除)結果;發(fā)光二極管</p><p>  顯示運算模式;可調用LPM_MUL

7、T及LPM_DIVIDE模塊。 </p><p><b>  系統(tǒng)設計方案:</b></p><p><b>  系統(tǒng)設計思路</b></p><p>  要完成2位十進制四則運算器電路,首先,需要生成2個兩位的十進制數(shù),其次,需要加減乘除四個運算,然后,四種運算的選擇,最后,對輸出結果的處理。</p>&l

8、t;p>  2個2位十進制模塊:法一,用兩個100進制計數(shù)器構成;法二,用4個10進制計數(shù)器構成。因為add1模塊(后面詳細介紹)只有兩個輸入口,所以選擇法一比較方便。</p><p>  加減乘除四則運算:①加法:寫一個加法程序,制成模塊,再分別取出它的各位、十位、百位。②減法:寫一個減法程序,用調用LPM的方法制成一個模塊,在分別取出它的各位、十位和符號位。③乘法:直接調用內部LPM,制成乘法模塊。④除

9、法:直接調用內部LPM,制成除法模塊。</p><p>  加減乘除運算的選擇:寫一個4路選擇器,分別選擇加減乘除。</p><p>  對輸出結果的處理:寫一個程序,對應不同選擇下的不同輸出,注意位數(shù)(加法:輸出在0~198之間,需3個LED燈來顯示;減法:輸出在0~99之間,需3個LED燈(其中一個符號位);乘法:輸出在0~9801之間,需4個LED燈;除法:輸出在0~99之間,需2個

10、LED燈。綜上可知,輸出一共需4個LED燈)。</p><p>  總體方案的論證與比較</p><p>  該方案能夠較好的實現(xiàn)本設計的功能。一些小模塊可以有不同做法。如:</p><p>  2位十進制模塊:法一,用兩個100進制計數(shù)器構成;法二,用4個10進制計數(shù)器構成。因為add1模塊(后面詳細介紹)只有兩個輸入口,所以選擇法一比較方便。</p>

11、<p>  加減乘除輸出結果的處理:要求出各個位的數(shù)。(假設輸出結果3位)法一:每次除以10,依次求出個位、十位、百位;法二:除以100,得百位,除以10得個位和十位。因為法二需要較多的LPM_DIVIDE和LPM_CONSTANT,所以,法一比較好。</p><p> ?。?)各功能塊的劃分與組成</p><p>  (4)系統(tǒng)的工作原理</p><p&

12、gt;  對于隨機輸入的兩個數(shù),系統(tǒng)都會對其進行加減乘除四則運算,然后選擇加法、減法、乘法或除法來作為輸出,并驗證其正確性。</p><p><b>  2、單元電路設計</b></p><p>  一、輸入單元(2個2位十進制模塊)</p><p>  輸入單元設計中, 用VHDL語言來實現(xiàn)該功能,然后制成模塊。</p><

13、;p><b>  二、加法單元</b></p><p>  對兩個輸入的數(shù)進行加法運算,可用VHDL語言來實現(xiàn)該功能。其輸出結果在0~198之間,將其結果顯示在LED燈上,就需調用4個LPM_DIVIDE和4個LPM_CONSTANT來實現(xiàn)。</p><p><b>  三、減法單元</b></p><p>  對兩

14、個輸入的數(shù)進行減法運算,可用VHDL語言來實現(xiàn)。結果有正、負之分,“F”來</p><p>  表示負號。輸出范圍在0~99之間,需2個LPM_DIVIDE 和2個LPM_CONSTANT來將其結果顯示在LED燈上。</p><p><b>  四、乘法單元</b></p><p>  乘法單元可調用LPM_MULT模塊來實現(xiàn)。其輸出結果在0—

15、9801之間,需4個LPM_DIVIDE和4個LPM_CONSTANT來將其結果顯示在LED燈上。</p><p><b>  五、除法單元</b></p><p>  除法單元直接調用3個LPM_DIVIDE 和2個LPM_CONSTANT就可以實現(xiàn)其要求。</p><p><b>  選擇模式單元</b></p&

16、gt;<p>  用VHDL語言寫一個四路選擇器程序,然后制成模塊。</p><p><b>  七、輸出單元</b></p><p>  用VHDL語言寫一個程序可實現(xiàn)該功能,然后制成模塊。</p><p><b>  3、軟件設計</b></p><p>  一、軟件設計平臺和開發(fā)

17、工具</p><p>  在在Quartus II平臺中用VHDL語言編程和調試。并調用其Quartus II的內部模塊來實現(xiàn)設計要求。</p><p><b>  二、程序原理圖</b></p><p>  ①總程序圖及其仿真波形</p><p><b> ?、谝话龠M制模塊</b></p&g

18、t;<p><b>  其程序為:</b></p><p>  library ieee;</p><p>  use ieee.std_logic_1164.all;</p><p>  use ieee.std_logic_unsigned.all;</p><p>  entity t100 is&l

19、t;/p><p>  port(clk,rst,en:in std_logic;</p><p>  cq:out std_logic_vector(6 downto 0);</p><p>  cout:out std_logic);</p><p><b>  end t100;</b></p><p

20、>  architecture behav of t100 is</p><p><b>  begin</b></p><p>  process(clk,rst,en)</p><p>  variable cqi:std_logic_vector(6 downto 0);</p><p><b> 

21、 begin</b></p><p>  if rst ='1' then cqi:=(others =>'0');</p><p>  elsif clk'event and clk='0' then </p><p>  if en ='1' then </p>

22、<p>  if cqi<99 then cqi:=cqi+1;</p><p>  else cqi:=(others=>'0');</p><p><b>  end if ;</b></p><p><b>  end if;</b></p><p>

23、<b>  end if;</b></p><p>  if cqi=99 then cout<='1';</p><p>  else cout<='0'; </p><p><b>  END IF;</b></p><p><b>  c

24、q<=cqi;</b></p><p>  end process; </p><p>  end behav;</p><p><b>  仿真波形為:</b></p><p><b> ?、奂臃K</b></p><p><b>  (1

25、)、add程序</b></p><p>  library ieee;</p><p>  use ieee.std_logic_1164.all;</p><p>  use ieee.std_logic_unsigned.all;</p><p>  entity add is </p><p><

26、;b>  port( </b></p><p>  shu1: in std_logic_vector(6 downto 0); </p><p>  shu2: in std_logic_vector(6 downto 0);</p><p>  shu_out: out std_logic_vector(7 downto 0)</p>

27、;<p><b>  ); </b></p><p><b>  end add;</b></p><p>  architecture behav of add is </p><p>  signal a,b:std_logic_vector(7 downto 0);</p><p&g

28、t;<b>  begin</b></p><p>  process(shu1,shu2)</p><p><b>  begin </b></p><p>  a<='0'&shu1;</p><p>  b<='0'&shu2;

29、</p><p>  shu_out<=a+b;</p><p>  end process;</p><p>  end behav;</p><p><b> ?。?)add1模塊</b></p><p><b> ?。?)有關說明</b></p>&

30、lt;p>  因為輸入是兩個2位十進制數(shù)(即輸入寬度是7字節(jié)[6..0]),所以輸出范圍為0~198(即輸出寬度為8字節(jié)[7..0]),之后除以100得百位,再除以10 的各位和十位。</p><p><b> ?、蹨p法</b></p><p><b> ?。?)sub程序</b></p><p>  LIBRARY

31、 IEEE;</p><p>  USE IEEE.STD_LOGIC_1164.ALL;</p><p>  USE IEEE.STD_LOGIC_UNSIGNED.ALL;</p><p>  entity sub is</p><p>  port(sub_in1, sub_in2: in std_logic_vector(6 do

32、wnto 0);</p><p>  flag: out std_logic;</p><p>  sub_out: out std_logic_vector(6 downto 0));</p><p>  end entity sub;</p><p>  architecture beh of sub is</p&g

33、t;<p><b>  begin</b></p><p>  process(sub_in1, sub_in2)</p><p><b>  begin</b></p><p>  if sub_in1>sub_in2 then</p><p>  flag <= 

34、9;1';sub_out <= sub_in1-sub_in2;</p><p><b>  else</b></p><p>  flag <= '0';sub_out <= sub_in2-sub_in1;</p><p><b>  end if;</b></p&g

35、t;<p>  end process;</p><p>  end architecture beh;</p><p><b> ?。?)sub1模塊</b></p><p><b> ?。?)有關說明</b></p><p>  兩個百進制數(shù)相減,最大為99,即輸出最多需要7字節(jié)。

36、flag是標示位,兩數(shù)相減若為正數(shù),flag輸出為0;若為負數(shù),flag輸出為“F”。</p><p><b>  ④乘法</b></p><p><b> ?。?)mul1模塊</b></p><p><b>  (2)有關說明</b></p><p>  因為99*99=9

37、801,所以輸出需14個字節(jié),即寬度為[13..0].共需4個lpm_divide。除以10得個位,再除以10的十位,然后除以10得百位,最后再除以10得千位。</p><p><b> ?、莩?lt;/b></p><p><b> ?。?)div1模塊</b></p><p><b>  (2)有關說明</

38、b></p><p>  除法單元直接調用3個LPM_DIVIDE 和2個LPM_CONSTANT就可以實現(xiàn)其要求。</p><p><b> ?、捱x擇模塊</b></p><p>  library ieee;</p><p>  use ieee.std_logic_1164.all;</p>&

39、lt;p>  use ieee.std_logic_unsigned.all;</p><p>  entity ct4 is</p><p>  port(CLK:IN STD_LOGIC;</p><p>  A:OUT STD_LOGIC_VECTOR(1 DOWNTO 0));</p><p><b>  END ct

40、4;</b></p><p>  architecture one of ct4 is</p><p>  SIGNAL B:STD_LOGIC_VECTOR(1 DOWNTO 0); </p><p><b>  begin</b></p><p>  process(CLK)</p>&l

41、t;p><b>  begin</b></p><p>  if CLK'event and CLK='1' THEN </p><p>  IF B<3 THEN B<=B+1; ELSE B<=(OTHERS=>'0');END IF ; </p><p>  END I

42、F; </p><p>  END PROCESS; </p><p><b>  A<=B;</b></p><p>  END ARCHITECTURE;</p><p><b> ?、咻敵瞿K</b></p><p><b>  (1)輸出模塊

43、程序</b></p><p>  LIBRARY IEEE;</p><p>  USE IEEE.STD_LOGIC_1164.ALL;</p><p>  USE IEEE.STD_LOGIC_UNSIGNED.ALL;</p><p>  ENTITY cal4_mod IS</p><p>  PO

44、RT(mod_sel: IN STD_LOGIC_vector(1 downto 0); </p><p>  add_out1: IN STD_LOGIC_vector(3 downto 0);</p><p>  add_out2: IN STD_LOGIC_vector(3 downto 0);</p><p>  add_out3: IN STD

45、_LOGIC_vector(3 downto 0);</p><p>  flag: IN STD_LOGIC;</p><p>  sub_out1: IN STD_LOGIC_vector(3 downto 0);</p><p>  sub_out2: IN STD_LOGIC_vector(3 downto 0);</p><

46、p>  mul_out1: IN STD_LOGIC_vector(3 downto 0);</p><p>  mul_out2: IN STD_LOGIC_vector(3 downto 0);</p><p>  mul_out3: IN STD_LOGIC_vector(3 downto 0);</p><p>  mul_out4: IN S

47、TD_LOGIC_vector(3 downto 0);</p><p>  div_out1: IN STD_LOGIC_vector(3 downto 0);</p><p>  div_out2: IN STD_LOGIC_vector(3 downto 0);</p><p>  outmod: out std_logic_vector(3 do

48、wnto 0);</p><p>  outLED1: out STD_LOGIC_vector(3 downto 0);</p><p>  outLED2: out STD_LOGIC_vector(3 downto 0); </p><p>  outLED3: out STD_LOGIC_vector(3 downto 0);</p>

49、<p>  outLED4: out STD_LOGIC_vector(3 downto 0)); </p><p>  END cal4_mod;</p><p>  ARCHITECTURE bhv OF cal4_mod IS</p><p><b>  BEGIN</b></p><

50、;p>  process(mod_sel)</p><p><b>  begin</b></p><p>  case mod_sel is</p><p>  when "00" => outmod<="1000"; outLED1<=(others=>'0

51、9;); outLED2<=add_out3; outLED3<=add_out2; outLED4<=add_out1;</p><p>  when "01" => outmod<="0100"; outLED1<=(others=>'0'); outLED2<=(others=>(not flag

52、)) ; outLED3<=sub_out2; outLED4<=sub_out1;</p><p>  when "10" => outmod<="0010"; outLED1<=mul_out4; outLED2<=mul_out3;outLED3<=mul_out2; outLED4<=mul_out1;</p&g

53、t;<p>  when others => outmod<="0001"; outLED1<=(others=>'0'); outLED2<=(others=>'0'); outLED3<=div_out2; outLED4<=div_out1;</p><p><b>  end cas

54、e;</b></p><p>  end process;</p><p><b>  end bhv;</b></p><p><b> ?。?)有關說明</b></p><p>  若四選一輸出為“00”時,選擇加法運算;輸出為“01”時,選擇減法運算:輸出為“10”時,選擇乘法運算

55、;輸出為“11”時,選擇除法運算。</p><p><b>  4、系統(tǒng)測試</b></p><p>  系統(tǒng)的功能測試及步驟:</p><p>  1、將制作好的的程序先進行編譯,看是否能編譯通過,若未通過,則進行修改直至編譯通過。</p><p>  2、編譯通過后,進行波形仿真來觀察其結果是否正確。</p&g

56、t;<p>  3、進行分配管腳,然后再編譯一次后。</p><p>  4、將編譯通過的程序下載到實驗箱上進行結果驗證。(選擇模式5, 采用EP2CT144C8芯片)</p><p>  ①由模式5和管腳分配可知:鍵8—clk1(第一個輸入數(shù)),鍵7--clk2(第二個輸入數(shù)),鍵6—clk3(選擇模式鍵),數(shù)碼管8和7,分別對應第一個輸入數(shù)的高低位,數(shù)碼管6和5分別對應第

57、二個輸入數(shù)的高低位,數(shù)碼管4、3、2、1依次為輸出的高低位,發(fā)光二極管D8、D7、D6、D5分別為加減乘除模式。</p><p> ?、陔S即地按鍵8和鍵7(隨即輸入兩個2位十進制數(shù)),然后,按鍵6選擇加法、減法、乘法、除法運算模式,最后,驗證結果。</p><p>  例如:當輸入為24和50時,選擇加法時,LED燈顯示74,選擇減法時,LED燈顯示F26,選擇乘法時,LED燈顯示1200

58、,選擇除法時,LED燈顯示0.</p><p><b>  5、結論</b></p><p>  本次設計能夠較好的完成設計的基本要求,即輸入兩個2位十進制數(shù)(0~99),能夠輸出它們的四則運算(加減乘除)結果;但是于某些地方還有待改進。</p><p> ?。?)對輸出結果各個位在LED燈的處理。如加法模塊輸出需3個led燈,本設計先除以10

59、0取出百位,再除以10取出十位和各位,共需4個LPM_DIVIDE和4個LPM_CONSTANT,如果每次都除以10,通過余數(shù)依次取出各位、十位、百位,就不用需要那么多的LPM_DIVIDE和LPM_CONSTANT。</p><p> ?。?)本設計的rst端直接接地,若要復位需重新把程序導入到實驗箱,比較麻煩。</p><p><b>  6、參考文獻</b>&l

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論