0 74x194的介紹
在數(shù)字電路中,移位寄存器(英語:shift register)是一種在若干相同時(shí)間脈沖下工作的以觸發(fā)器為基礎(chǔ)的器件,數(shù)據(jù)以并行或串行的方式輸入到該器件中,然后每個(gè)時(shí)間脈沖依次向左或右移動(dòng)一個(gè)比特,在輸出端進(jìn)行輸出。這種移位寄存器是一維的,事實(shí)上還有多維的移位寄存器,即輸入、輸出的數(shù)據(jù)本身就是一些列位。實(shí)現(xiàn)這種多維移位寄存器的方法可以是將幾個(gè)具有相同位數(shù)的移位寄存器并聯(lián)起來。
參考文檔74LS194\74HC194的功能表
74LS194計(jì)數(shù)器及其應(yīng)用
一個(gè)D觸發(fā)器可以實(shí)現(xiàn)一個(gè)一位的寄存器,兩個(gè)觸發(fā)器可以實(shí)現(xiàn)一個(gè)兩位的寄存器,連接同一個(gè)時(shí)鐘
移位寄存器如下圖
1 74x194的實(shí)現(xiàn)
1.1 設(shè)計(jì)文件
module p_74x194(clk,clr_l,rin,lin,s,d,q );
input clk,clr_l,rin,lin;
input [1:0] s;
input [3:0] d;
output [3:0] q;
//reg [3:0] q=4'b0000;
reg [3:0] q=4'b0000;//注意對(duì)其賦初值,因?yàn)楹竺鏁?huì)用它
always @ (posedge clk or negedge clr_l)begin
if (clr_l==0) q<=0;
else case (s)
0:q<=q; //保持
1:q<={rin,q[3:1]}; //右移
2:q<={q[2:0],lin}; //左移
3:q<=d; //裝載
default q<=4'bx ;//不可能發(fā)生
endcase
/* else case (s)
0:q<=q; //保持
1:begin q[3]<=rin;q[2]<=q[3];q[1]<=q[2];q[0]<=q[1];end//右移
2:begin q[3]<=q[2];q[2]<=q[1];q[1]<=q[0];q[0]<=lin;end//左移
3:q<=d; //裝載
default q<=4'bx ;
endcase*/
end
endmodule
1.2 仿真文件
1.2.1 仿真文件1
//教材P99頁
module sim_p_74x194;
reg clk = 0;
reg clr_l = 1;
reg rin = 0;
reg lin = 1;
reg [1:0] s = 3;//裝載3
reg [3:0] d = 4'b0101;
wire [3:0] q;
p_74x194 p_74x194_inst0(clk,clr_l,rin,lin,s,d,q);
initial begin
clk = 1'b0;
#10
clk = 1'b1;
#10
clk = 1'b0;
s = 2'b10;//2左移
#10
clk = 1'b1;//第2個(gè)時(shí)鐘上升沿,執(zhí)行左移,左移后應(yīng)q=4'b1011;
#10
clk = 1'b0;
#10
clk = 1'b1;//第3個(gè)時(shí)鐘上升沿,執(zhí)行左移,左移后應(yīng)q=4'b0111;
#10
clk = 1'b0;
#10
clk = 1'b1;//第4個(gè)時(shí)鐘上升沿,執(zhí)行左移,左移后應(yīng)q=4'b1111;
#10
clk = 1'b0;
s = 2'b01;//右移
end
always #10 clk = ~clk;
endmodule
1.2.2 仿真文件2
//自己編寫的測(cè)試文件
module sim_p_74x194( );
reg clk,clr_l,rin,lin;
reg [1:0] s;
reg [3:0] d;
wire [3:0] q;
p_74x194 p_74x194_inst0(
.clk(clk),
.clr_l(clr_l),
.rin(rin),
.lin(lin),
.s(s),
.d(d),
.q(q)
);
always #10 clk = ~clk;
initial begin
clk = 1'b0;
clr_l = 1'b1;
rin = 1'b0;
lin = 1'b1;
s = 2'b11;
d = 4'b0101;
#30
s = 2'b10;
#60
s = 2'b01;
end
endmodule
1.3 仿真結(jié)果
1.3.1 仿真結(jié)果對(duì)q賦初值
reg [3:0] q=4’b0000;
將結(jié)果轉(zhuǎn)換成二進(jìn)制,便于觀察
1.3.2 未對(duì)q賦初值
將結(jié)果轉(zhuǎn)換成二進(jìn)制,便于觀察
2 使用74x194IP核實(shí)現(xiàn)11001序列發(fā)生器
2.1 分析
所有反饋邏輯是
74x194的連接
2.2 設(shè)計(jì)文件
1.先把IP核添加進(jìn)來,點(diǎn)擊Settings 在彈出的窗口中選 擇點(diǎn)擊左側(cè)的IP圖標(biāo)點(diǎn)擊庫管理(Repository Manager)頁框在庫管理頁框中點(diǎn)擊“+”圖標(biāo)增加IP目錄
2.選擇設(shè)計(jì)好了的p_74x194工程目錄,目錄被加載進(jìn)來,有一個(gè)IP
3.點(diǎn)擊流程導(dǎo)航下工程項(xiàng)下的IP目錄( IP Catalog),就可以看見剛剛添加的“p_74x194_0”IP核 。
4.雙擊p_74x194_0 彈出IP窗口??梢钥吹皆揑P核的邏輯符號(hào)如圖所示。這個(gè)窗口可以用來編輯IP實(shí)例組件的名稱。點(diǎn)擊ok實(shí)例化IP,例化成功后
module seq_11001_3(
input clk,
output led
);
wire lin;
reg[1:0] s=2'b10;//2左移
wire[3:0] q;
assign lin=~q[2]|~q[1];//反饋函數(shù)lin=q2'+q1'
assign led=lin;//可以將q[n]送到輸出也是可實(shí)現(xiàn)11001序列
p_74x194_0 uut( //調(diào)用IP核
.clk(clk),
.clr_l(1), //清零端無效
.rin(0), //74x194 rin接地
.lin(lin), //左移輸入端等于q2'+q1'
.s(s), //左移方式,s=2'b10
.d(0), //數(shù)據(jù)輸入端可以接任意值
.q(q) //輸出送q
//需要對(duì)p_74x194.v中的q賦初值,因?yàn)楹竺鏁?huì)用
);
endmodule
2.3 仿真文件
與4.1 時(shí)鐘同步狀態(tài)機(jī)的設(shè)計(jì)中的seq_11001_1仿真文件一樣文章來源:http://www.zghlxwxcb.cn/news/detail-499301.html
module sim_seq_11001_3( );
reg clk;
wire led;
seq_11001_3 seq_11001_3_inst0(
.clk(clk),
.led(led)
);
initial begin
clk = 0;
end
always #10 clk =~clk;
endmodule
2.4 約束文件
## clk
set_property PACKAGE_PIN D4 [get_ports clk]
set_property IOSTANDARD LVCMOS33 [get_ports clk]
##led
set_property PACKAGE_PIN P9 [get_ports {led}]
set_property IOSTANDARD LVCMOS33 [get_ports {led}]
2.5 仿真結(jié)果
文章來源地址http://www.zghlxwxcb.cn/news/detail-499301.html
到了這里,關(guān)于4.3 移位寄存器的實(shí)現(xiàn)和應(yīng)用的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!