<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

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

          實驗22 4位串行累加器

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

          實驗目的

          實驗任務

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

          本文引用地址:http://www.ex-cimer.com/article/202310/451566.htm

          實驗原理

          根據(jù)上述電路框圖,可以分割系統(tǒng)任務。

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

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

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

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

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

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

          建模描述

          設計文件accum4.v

           module accum4
           (
           input wire datain,     //數(shù)據(jù)輸入
           input wire clk,rst,    //脈沖和復位輸入信號
           output wire [3:0] sum  //累加結果
           );
           wire [3:0] adder;      //寄存器1,存儲輸入加數(shù)內容
           wire [3:0] sumer;      //寄存器2,存儲被加數(shù)內容
           wire cin;              //全加器超前進位信號
           wire sumout;           //全加器輸出 
           assign sum = sumer;    //累加結果輸出
           shift u1               //移位寄存器,把數(shù)據(jù)存入加數(shù)寄存器
           (
           .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              //移位寄存器,將全加器結果存入被加數(shù)寄存器
          (
          .clk(clk),           
          .rst(rst),			  
          .datain(sumout),  
          .dataout(sumer) 	  
          );
          endmodule

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

           //   Description     :   超前進位邏輯產生 
           //				JK觸發(fā)器: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觸發(fā)器
           (						
           .clk(clk),.j(j),.k(k),.rst(rst),.set(),	
           .q(q),.qb()
           );
           assign j = a&b;        //根據(jù)推導得到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;   //串行輸入數(shù)據(jù)初值
          	#25                      
          	rst = 1;               
          	end
          	always #10 clk = ~clk;      
          	always @(posedge clk)       //產生串行輸入數(shù)據(jù)
          	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. 根據(jù)仿真教程,實現(xiàn)對本工程的仿真,驗證仿真結果是否與預期相符。
          4. 如果仿真無誤,構建并輸出編程文件,燒寫至的Flash之中。
          5. 觀察輸出結果。

          仿真結果和實驗現(xiàn)象

          仿真結果如下圖所示:

          仿真文件的串行輸入數(shù)據(jù)也是靠串行轉并行移位寄存器輸入,所以累加器計算的時鐘要順延8個clock得到結果。可以修改仿真文件中的串行輸入數(shù)據(jù)初值驗證累加器結果。



          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();