新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 實驗22 4位串行累加器

        實驗22 4位串行累加器

        作者: 時間:2023-10-16 來源:電子森林 收藏

        實驗目的

        實驗任務

        設計一個4位串行,電路原理框圖如圖所示,在開關K處設置串行輸入數據,在CP端輸入8個脈沖,將完成一次,兩個四位串行數據的相加,結果存D-A中。

        本文引用地址:http://www.104case.com/article/202310/451566.htm

        實驗原理

        根據上述電路框圖,可以分割系統任務。

        累加器是一個具有特殊功能的二進制寄存器,可以存放計算產生的中間結果,省去了計算單元的讀取操作,能加快計算單元的速度。串行累加器是由移位寄存器和全加器組成的一個求和電路。
        由題目給出的要求可以分析組合邏輯電路一是一個全加器電路;組合邏輯電路二和組合邏輯電路三加上JK觸發器組成了加法超前進位電路,D-A是儲存結果的寄存器。

        頂層模塊由4個模塊組成:

        Shift U1模塊;輸入的串行寄存器,把輸入的串行數據轉換成并行數據寄存

        Adder U2模塊:一位的二進制全加器模塊,輸入的進位信號由超前進位邏輯產生

        Ahead U3模塊:超前進位邏輯,根據題目要求用JK觸發器產生超前進位

        Shift U4模塊:一位全加器輸出再移位輸出保存在4位寄存器中

        建模描述

        設計文件accum4.v

         module accum4
         (
         input wire datain,     //數據輸入
         input wire clk,rst,    //脈沖和復位輸入信號
         output wire [3:0] sum  //累加結果
         );
         wire [3:0] adder;      //寄存器1,存儲輸入加數內容
         wire [3:0] sumer;      //寄存器2,存儲被加數內容
         wire cin;              //全加器超前進位信號
         wire sumout;           //全加器輸出 
         assign sum = sumer;    //累加結果輸出
         shift u1               //移位寄存器,把數據存入加數寄存器
         (
         .clk(clk),           
         .rst(rst),			 
         .datain(datain),  
         .dataout(adder) 	
         );
         adder1 u2              //全加器,兩個寄存器的最低位相加,進位由超前進位邏輯輸出
         (
         .a(sumer[0]),           
         .b(adder[0]),
          .cin(cin),.sum(sumout),     
          .cout());ahead u3              //超前進位邏輯,產生進位信號
          (
          .a(sumer[0]),.b(adder[0]),.clk(clk),.rst(rst),
          .q(cin)
          ); 
        shift u4              //移位寄存器,將全加器結果存入被加數寄存器
        (
        .clk(clk),           
        .rst(rst),			  
        .datain(sumout),  
        .dataout(sumer) 	  
        );
        endmodule

        頂層文件里面例化了shift.v、adder1.v、ahead.v等模塊,其中全加器和移位寄存器的源碼文件在前面章節有介紹
        我們看看超前進位邏輯的源碼ahead.v

         //   Description     :   超前進位邏輯產生 
         //				JK觸發器:Qi+1=J!Qi+!KQi
         //				全加器進位:Ci+1=AiBi+(Ai+Bi)Ci=AiBi!Ci+!(Ai+Bi)Ci
         //				推導得出:J=AiBi,K=!(Ai+Bi)
         //********************************************************
         module ahead
         (
         input wire a,b,clk,rst,
         output wire q
         );
         wire j,k;jk_ff  u1              //例化JK觸發器
         (						
         .clk(clk),.j(j),.k(k),.rst(rst),.set(),	
         .q(q),.qb()
         );
         assign j = a&b;        //根據推導得到J,K與加法器輸入信號邏輯關系
         assign k = ~(a|b);
         endmodule

        仿真文件accum4_tb.v

         `timescale 1ns/100ps    //仿真時間單位/時間精度        
         module accum4_tb(); 
         reg    clk,rst,datain; 
         reg [7:0] data;
         wire   [3:0]sum; //初始化過程塊
         initial
         begin
        	clk = 0;
        	rst = 0;  
        	data <= 8'b00100001;   //串行輸入數據初值
        	#25                      
        	rst = 1;               
        	end
        	always #10 clk = ~clk;      
        	always @(posedge clk)       //產生串行輸入數據
        	datain
        	if(!rst)
        		begin
        			datain <= 0;
        		end
        	else
        		begin
        			data <={0,data[7:1]};
        			datain <= data[0];
        		end
         //module調用例化格式
         accum4   u1 
         (
        		.clk	(clk),     
        		.rst	(rst), 
        		.datain (datain),
        		.sum	(sum)   
        		);
        		endmodule

        實驗步驟

        1. 打開,建立工程。
        2. 新建設計文件,并鍵入設計代碼,包括添加需要調用的模塊文件。
        3. 根據仿真教程,實現對本工程的仿真,驗證仿真結果是否與預期相符。
        4. 如果仿真無誤,構建并輸出編程文件,燒寫至的Flash之中。
        5. 觀察輸出結果。

        仿真結果和實驗現象

        仿真結果如下圖所示:

        仿真文件的串行輸入數據也是靠串行轉并行移位寄存器輸入,所以累加器計算的時鐘要順延8個clock得到結果??梢孕薷姆抡嫖募械拇休斎霐祿踔凋炞C累加器結果。



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 合山市| 叶城县| 孝昌县| 广汉市| 合川市| 东港市| 大新县| 卢氏县| 峨山| 美姑县| 双鸭山市| 林甸县| 西畴县| 手机| 嘉荫县| 龙海市| 衡阳县| 稷山县| 蛟河市| 黄山市| 绍兴县| 新郑市| 民县| 卫辉市| 通河县| 龙泉市| 东丰县| 卓尼县| 思南县| 宿松县| 维西| 中江县| 勃利县| 绿春县| 太湖县| 江口县| 寿阳县| 长葛市| 商洛市| 曲沃县| 寻乌县|