【正文】
AUL_R=conv_std_logic_vector(i,28)。 ENTITY BCD_tb IS END BCD_tb。op1_bcd=X00000015。op1_bcd=X00000011。op1_bcd=X00000007。op1_bcd=X00000003。 begin u1 : bin port map( op1_BCD =op1_BCD, op1_out =op1_out )。 use 。039。 AUL_R : in STD_LOGIC_VECTOR(27 downto 0) )。 end if。 next_state=111。 op1_bcd(31 downto 0)=op1_temp(3 downto 0)amp。op1_temp(27 downto 24)。139。op1_temp(15 downto 12)amp。 else next_state=100。139。op1_temp(7 downto 4)amp。 next_state=011。op1_bcd=op1_bcd。 end if。 else case current_state is when 000= if add_sc=39。 elsif rst=39。 then current_state=next_state。139。4 when X8000 =temp=conv_std_logic_vector(1,4)。9 when X0040 =temp=conv_std_logic_vector(6,4)。 load : IN STD_LOGIC。 END FSM_architecture。 else next_state=000。 when X1000 = temp0=000 。139。 then op2_load=39。 op1_load=39。 next_state=100。 end if。 if key=39。 when others =next_state=000。139。 temp1=000。 op1_load=39。 next_state=010。 . . end if。 then op2_load=39。 if key=39。 when 010 = if operate=39。139。039。 then if number=39。 。 end if。 end process。139。139。139。139。139。139。139。139。039。 oprand : OUT STD_LOGIC_VECTOR(2 downto 0) )。 USE 。 else t3:=t2/t1。 t2:=conv_integer(op2_in)。 AUL_OUT=temp。 . . END AUL。 ALU 模塊程序 LIBRARY ieee。 . . when G1= if temp = scancode then sc=temp。 end if。 BEGIN process(clk,rst,scancode) begin if rst=39。 ENTITY filter IS PORT ( clk : IN STD_LOGIC。enable=39。139。enable=39。139。enable=39。139。enable=39。139。 then scancode=X0000。 next_state=00。 then col=1111。139。 END keys。 . . 參考文獻(xiàn) [1] 喬廬峰,王志功 .數(shù)字電路設(shè)計(jì)教程 [M]. 北京電子工業(yè)出版社, 2020 [2] 潘松,黃繼業(yè) .EDA 技術(shù)實(shí)用教程(第二版) [M]. 科學(xué)出版社, 2020 [3] 焦素敏, EDA應(yīng)用技術(shù) [M]. 北京清華大學(xué)出版社, 2020 [4] 譚會生,張昌凡 .EDA技術(shù)及應(yīng)用 [M]. 西安西安電子科技大學(xué)出版社, 2020 [5] 曾繁泰,陳美金 .VHDL 程序設(shè)計(jì) [M]. 北京清華大學(xué)出版社, 2020 . . 附錄 鍵盤矩陣模塊程序 LIBRARY ieee。通過老師的講解我對本課題有了一定的了解。OP2 模塊原理圖如圖 411 所示,仿真波形圖如圖 412 所示。 . . 圖 43 去抖模塊原理圖 圖 44 去抖模塊仿真波形 ALU模 塊設(shè)計(jì) ALU 模塊主要實(shí)現(xiàn)數(shù)據(jù)的加減乘除運(yùn)算,用 VHDL代碼描述邏輯單元、算數(shù)單元、選擇器單元,要求輸入兩組二進(jìn)制數(shù)據(jù),利用元件例化語句將設(shè)計(jì)的三個(gè)單元進(jìn)行組合,建立一個(gè)包含所有元件的包集。 檢測按鍵次數(shù) press_count 第 1運(yùn)算數(shù) bcd FSM 第 2運(yùn)算數(shù) bcd bcd2 (+*/) load ALU bcd bcd2 alu_op res display outsel opkey scancode 圖 31 簡易計(jì)算器模塊化設(shè)計(jì)原理圖 . . 4 模塊化設(shè)計(jì)分析 鍵盤矩陣模塊 計(jì)算器輸入數(shù)字和其他功能按鍵要用到很多按鍵,如果采用獨(dú)立按鍵的方式,在這種情況下,編程會很簡單,但是會占用大量的 I/O 口資源,因此在很多情況下都不采用這種方式,而是采用矩陣鍵盤的方案。 SE版和 OEM 版在功能和性能方面有較大差別,比如對于大家都關(guān)心的仿真速度問題,以 Xilinx 公司提供的 OEM 版本 ModelSim XE為例,對于代碼少于 40000行的設(shè)計(jì), ModelSim SE 比 ModelSim XE要快 10 倍;對于代碼超過 40000 行的設(shè)計(jì),ModelSim SE要比 ModelSim XE快近 40 倍。 Altera 的 Quartus II 可編程邏輯軟件屬于第四代 PLD 開發(fā)平臺。該軟件具有開放性、與結(jié)構(gòu)無關(guān)、多平臺、完全集成化、豐富的設(shè)計(jì)庫、模 塊化工具等特點(diǎn), 支持原理圖、 VHDL、 VerilogHDL以及 AHDL( Altera Hardware Description Language)等多種設(shè)計(jì)輸入形式,內(nèi)嵌自有的綜合器以及仿真器,可以完成從設(shè)計(jì)輸入到硬件配置的完整 PLD設(shè)計(jì)流程。在利用 EDA 工具進(jìn)行電子設(shè)計(jì)時(shí),邏輯圖,分立電子原件作為整個(gè)越來越復(fù)雜的電子系統(tǒng)的設(shè)計(jì)已不適應(yīng)。當(dāng)這些 FPGA 器件加載,配置上不同的文件時(shí),這個(gè)器件便具有了相應(yīng)的功能。國外硬件描述語言種類很多,有的從 Pascal 發(fā)展而來,也有一些從 C 語言發(fā)展而來。 ( 4)進(jìn)階設(shè)計(jì)內(nèi)容:實(shí)現(xiàn)有符號數(shù)的計(jì)算。 ( 5)進(jìn)階設(shè)計(jì)內(nèi)容:實(shí)現(xiàn)浮點(diǎn)數(shù)的計(jì)算。有些 HDL 成為 IEEE 標(biāo)準(zhǔn),但大部分是企業(yè)標(biāo)準(zhǔn)。在這一系列的設(shè)計(jì),綜合,仿真,驗(yàn)證,配置的過程中,現(xiàn)代電子設(shè)計(jì)理論和現(xiàn)代電子設(shè)計(jì)方法貫穿于其中。任何一種 EDA 工具,都需要一種硬件描述語言來作為 EDA 工具的工作語言。 Quartus II 可以在 XP、 Linux以及 Unix上使用,除了可以使用 Tcl腳本完成設(shè)計(jì)流程外,提供了完善的用戶圖形界面設(shè)計(jì)方式。該平臺支持一個(gè)工作組環(huán)境下的設(shè)計(jì)要求,其中包括支持基于 Inter 的協(xié)作設(shè)計(jì)。 ModelSim SE支持 PC、 UNIX 和 LINUX混合平臺; Mentor Graphics 公司提供業(yè)界最好的技術(shù)支持與服務(wù)。矩陣鍵盤采用四條線作為行線,四條線作為列線組成鍵盤,在行線和列線的每個(gè)交叉點(diǎn)上設(shè)置一個(gè)按鍵。 ALU 模塊原理圖如圖 45 所示,仿真波形圖如圖 46 所示。 圖 411 OP2 模塊設(shè)計(jì)原理圖 圖 412 OP2 模塊仿真波形圖 BIN 模塊設(shè)計(jì) 二進(jìn)制模塊的功能是將二進(jìn)制數(shù)字轉(zhuǎn)化成 BCD 碼。但是,在對該課題有一定的了解的前提下,也發(fā)現(xiàn)了很多問題。 USE 。 ARCHITECTURE keys_architecture OF keys IS signal current_state,next_state:std_logic_vector(1 downto 0)。 and enable=39。 else case current_state is when 00 = col=1110 。 when others=col=1111。enable=39。 when 1011=scancode=X0004。039。 when 1011=scancode=X0040。039。 when 1011=scancode=X0400。039。 when 1011=scancode=X4000。039。 rst : IN STD_LOGIC。139。 end if。 else sc=X0000。 USE 。 ARCHITECTURE AUL_architecture OF AUL IS BEGIN process(oprand,op1_in,op2_in) variable temp,temp1,temp2 : STD_LOGIC_VECTOR(27 downto 0)。 when 010 = t1:=conv_integer(op1_in)。 t3:=t1*t2。AUL_OUT=conv_STD_LOGIC_VECTOR(t3,28)。 ENTITY FSM IS PORT ( . . clk : IN STD_LOGIC。 END FSM。number=39。number=39。number=39。number=39。number=39。number=39。number=39。number=39。number=39。 process(clk,rst) begin if (rst = 39。 end process。 op1_load = 39。139。 oprand=000。 then op1_add=39。039。139。139。 when X0004 = temp1=010 。 else next_state=000。139。 if key=39。 then op2_load=39。 end case。139。 when X0002 = temp0=011 。 else next_state=000。139。139。temp0=000。 if key=39。 end if。 OP1 模塊設(shè)計(jì) LIBRARY ieee。 res_bcd : IN STD_LOGIC_VECTOR(31 downto 0)。6 when X0080 =temp=conv_std_logic_vector(3,4)。1 when others =null。 then current_state=000。 end if。139。139。 when 001= if add_sc=39。 end if。 else next_state=010。op1_temp(11 downto