【正文】
乘數(shù)前添加16個0,之后當(dāng)脈沖到來的時候左移一位。 end if。當(dāng) mul=39。139。end process。039。process(clk,t16b,mul)begin if mul=39。 then if t16b16 then t16b=t16b+1。 then t16b=00000。圖51 乘法器設(shè)計結(jié)構(gòu)框圖 乘法器控制電路設(shè)計由于此次設(shè)計的是16位二進制乘法器電路,被乘數(shù)和乘數(shù)必須要移動16次,因此必須要使時鐘信號只有16個脈沖。由于兩個數(shù)相減的差有可能為正數(shù)也有可能為負數(shù),當(dāng)差為負數(shù)時表現(xiàn)為補碼的形式,必須要將負數(shù)的補碼進行修正,修正時對差的低16位求補碼運算,而差的正負用借位co來表示,co=‘1’表示差為負,否則為正。圖21 系統(tǒng)結(jié)構(gòu)框圖2 加法器設(shè)計 為了能夠?qū)崿F(xiàn)4位BCD碼的加法運算,設(shè)計中被加數(shù)和加數(shù)都為16位二進制數(shù),由于2個16位二進制數(shù)相加可能會產(chǎn)生進位,同時為了方便數(shù)碼管顯示,和采用了20位二進制。. . . . .選題3 實驗講義實驗名稱:基于FPGA的計算器設(shè)計1 基于VHDL的運算系統(tǒng)設(shè)計原理分析本設(shè)計是基于VHDL的運算系統(tǒng)設(shè)計,目的是為了實現(xiàn)4位BCD碼的加、減、乘、除的運算功能。此外還有清零信號rst和加法使能信號add,當(dāng)rst=’1’時對和進行清零,否則當(dāng)add=‘1’時進行加法運算。4 乘法器設(shè)計 乘法器設(shè)計的原理分析乘法運算的方法可以通過以下實例來說明:設(shè)被乘數(shù)A=1110,乘數(shù)B=1101,求AB??刂齐娐凡捎糜嫈?shù)的辦法,當(dāng)乘法運算使能信號mul=‘1’時,將計數(shù)值t16b清零,否則當(dāng)t16b小于16時,t16b加1且cp等于clk;否則cp等于0,這樣就保證了cp輸出只有16個脈沖。 elsif clk39。 end if。039。 end if。 乘數(shù)右移電路設(shè)計乘數(shù)右移的目的是為了判斷乘數(shù)的最低位是0還是1,如果為0則乘機加上移位后的被乘數(shù),否則加上0。 then if mul=39。139。 qb=shifter16(0)。關(guān)鍵的VHDL程序如下:process(mul,clk)begin if mul=39。當(dāng)mul=39。139。 end if。關(guān)鍵的VHDL程序如下: process(mul,clk)beginif mul=39。)。event and clk=39。 then sum=sum+d。 乘法器頂層設(shè)計將控制電路、乘數(shù)右移電路、被乘數(shù)左移電路以及加法電路都打包后,采用原理圖的方式將各個模塊連接成頂層電路,頂層實體端口定義如圖52。在mul=1,時候開始進行乘法運算,經(jīng)過16個脈沖之后得到乘積,綜上所述,4位BCD碼乘法器電路已經(jīng)設(shè)計完成。B的過程如下: 除法器電路結(jié)構(gòu)框圖根據(jù)前面的算法分析,可知除法器設(shè)計要用到鎖存器和移位寄存器,還有定時器判斷運算過程。 除法器頂層設(shè)計除法器頂層設(shè)計的端口信號定義如圖62。在load=1,時候開始進行除法運算,經(jīng)過16個脈沖之后得到商和余數(shù),綜上所述,4位BCD碼除法器電路已經(jīng)設(shè)計完成。鍵盤上的每一個按鍵其實就是一個開關(guān),每個鍵都有一個上拉電阻,當(dāng)某鍵按下時,該按鍵的接點會呈現(xiàn)低電平狀態(tài),反之,未按下時則呈現(xiàn)高電平狀態(tài)。 鍵盤掃描計數(shù)器電路時鐘信號clk頻率為1KHz,按鍵(key_pressed)為使能信號,當(dāng)未按下鍵盤時key_pressed=‘1’,此時由0~15反復(fù)計數(shù),并將計數(shù)值作為按鍵檢測電路的輸入信號,直到按下鍵key_pressed=‘0’時計數(shù)器停止輸出計數(shù)值。 then if key_pressed=39。 end if。按鍵檢測電路的關(guān)鍵VHDL程序如下:row=1110 when scan_t(3 downto 2)=00 else 1101 when scan_t(3 downto 2)=01 else 1011 when scan_t(3 downto 2)=10 else 0111。 消抖動電路的關(guān)鍵VHDL程序如下:process(clk,key_pressed)variable q:std_logic_vector(5 downto 0)。 elsif clk39。 end if。 else keyed=39。 鍵盤編碼電路將鍵盤16個鍵的每個鍵進行編碼,然后按照每個鍵的編碼值譯碼成實際的數(shù)值。139。3 when 0011=code=1100。6 when 0111=code=1101。9 when 1011=code=1110。用b代表=鍵 when others=code=1111。end process。 圖76 鍵盤掃描電路仿真波形在波形仿真時設(shè)置鍵盤的列輸入col分別為“1110”、“1101”、“1011”、“0111”時,輸出的行row的值為“1110”表示此時掃描的是第一行,輸出的譯碼值code分別為C,這與設(shè)置的鍵盤值一致,這說明結(jié)果正確。第一個和第二個數(shù)據(jù)輸入的使能信號時序如圖81。 圖84 控制電路仿真波形在波形仿真時,設(shè)置鍵盤譯碼值d分別為“1010”、“