實(shí)驗(yàn)14:移位寄存器
實(shí)驗(yàn)?zāi)康?/h2>實(shí)驗(yàn)任務(wù)
本實(shí)驗(yàn)的任務(wù)是設(shè)計(jì)一個(gè)7位右移并行輸入、串行輸出的移位寄存器。
本文引用地址:http://www.ex-cimer.com/article/202310/451354.htm實(shí)驗(yàn)原理
如果將多個(gè)觸發(fā)器級(jí)聯(lián)就構(gòu)成一個(gè)多位的移位寄存器,如下圖所示,是以4位移位寄存器為例的邏輯電路圖,其中的LD/SHIFT是一個(gè)置數(shù)/移位控制信號(hào)。當(dāng)LD/SHIFT為1時(shí),在CP作用下,從輸入端A、B、C、D并行接收數(shù)據(jù);當(dāng)LD/SHIFT為0時(shí),在CP作用下,將寄存器中的數(shù)據(jù)順序移出,空位由輸入端SIN補(bǔ)充。這種寄存器常用來進(jìn)行并行數(shù)據(jù)到串行數(shù)據(jù)的轉(zhuǎn)換。
Verilog HDL建模描述
7位移位寄存器程序清單 shift7.v
module shift7(input wire clk, //輸入時(shí)鐘input wire rst, //復(fù)位信號(hào)input wire [6:0] datain, //并行輸入數(shù)據(jù)output wire dataout //串行輸出數(shù)據(jù)); reg [6:0] data; always @(posedge clk)
if(!rst)
data <= datain; //同步復(fù)位,復(fù)位時(shí)并行數(shù)據(jù)存入變量data
else
begin
data[6] <= 1'b0; //最高為補(bǔ)0
data[5] <= data[6];
data[4] <= data[5];
data[3] <= data[4];
data[2] <= data[3];
data[1] <= data[2];
data[0] <= data[1]; //右移一位
end assign dataout = data[0]; //串行輸出 endmodule
仿真文件shift_tb.v
`timescale 1ns/100ps //仿真時(shí)間單位/時(shí)間精度module shift7_tb; reg clk, rst; //需要產(chǎn)生的激勵(lì)信號(hào)定義reg [6:0]datain; wire dataout; //需要觀察的輸出信號(hào)定義initial
begin
clk =0;
rst =1;
datain =7'b1110101; //所需移位數(shù)據(jù)
#50
rst =0;
#100
rst =1;
endalways #20 clk =~clk; //產(chǎn)生時(shí)鐘信號(hào) 頻率25MHz//module調(diào)用例化格式shift7 u1 (
.clk (clk),
.rst (rst),
.datain (datain),
.dataout(dataout)
);endmodule
仿真結(jié)果和實(shí)驗(yàn)現(xiàn)象
本實(shí)驗(yàn)的任務(wù)是設(shè)計(jì)一個(gè)7位右移并行輸入、串行輸出的移位寄存器。
本文引用地址:http://www.ex-cimer.com/article/202310/451354.htm如果將多個(gè)觸發(fā)器級(jí)聯(lián)就構(gòu)成一個(gè)多位的移位寄存器,如下圖所示,是以4位移位寄存器為例的邏輯電路圖,其中的LD/SHIFT是一個(gè)置數(shù)/移位控制信號(hào)。當(dāng)LD/SHIFT為1時(shí),在CP作用下,從輸入端A、B、C、D并行接收數(shù)據(jù);當(dāng)LD/SHIFT為0時(shí),在CP作用下,將寄存器中的數(shù)據(jù)順序移出,空位由輸入端SIN補(bǔ)充。這種寄存器常用來進(jìn)行并行數(shù)據(jù)到串行數(shù)據(jù)的轉(zhuǎn)換。
7位移位寄存器程序清單 shift7.v
module shift7(input wire clk, //輸入時(shí)鐘input wire rst, //復(fù)位信號(hào)input wire [6:0] datain, //并行輸入數(shù)據(jù)output wire dataout //串行輸出數(shù)據(jù)); reg [6:0] data; always @(posedge clk) if(!rst) data <= datain; //同步復(fù)位,復(fù)位時(shí)并行數(shù)據(jù)存入變量data else begin data[6] <= 1'b0; //最高為補(bǔ)0 data[5] <= data[6]; data[4] <= data[5]; data[3] <= data[4]; data[2] <= data[3]; data[1] <= data[2]; data[0] <= data[1]; //右移一位 end assign dataout = data[0]; //串行輸出 endmodule
仿真文件shift_tb.v
`timescale 1ns/100ps //仿真時(shí)間單位/時(shí)間精度module shift7_tb; reg clk, rst; //需要產(chǎn)生的激勵(lì)信號(hào)定義reg [6:0]datain; wire dataout; //需要觀察的輸出信號(hào)定義initial begin clk =0; rst =1; datain =7'b1110101; //所需移位數(shù)據(jù) #50 rst =0; #100 rst =1; endalways #20 clk =~clk; //產(chǎn)生時(shí)鐘信號(hào) 頻率25MHz//module調(diào)用例化格式shift7 u1 ( .clk (clk), .rst (rst), .datain (datain), .dataout(dataout) );endmodule
評(píng)論