0 74x194的介绍
在数字电路中,移位寄存器(英语:shift register)是一种在若干相同时间脉冲下工作的以触发器为基础的器件,数据以并行或串行的方式输入到该器件中,然后每个时间脉冲依次向左或右移动一个比特,在输出端进行输出。这种移位寄存器是一维的,事实上还有多维的移位寄存器,即输入、输出的数据本身就是一些列位。实现这种多维移位寄存器的方法可以是将几个具有相同位数的移位寄存器并联起来。
参考文档74LS194\74HC194的功能表
74LS194计数器及其应用
一个D触发器可以实现一个一位的寄存器,两个触发器可以实现一个两位的寄存器,连接同一个时钟
移位寄存器如下图
1 74x194的实现
1.1 设计文件
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;//注意对其赋初值,因为后面会用它
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 ;//不可能发生
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个时钟上升沿,执行左移,左移后应q=4'b1011;
#10
clk = 1'b0;
#10
clk = 1'b1;//第3个时钟上升沿,执行左移,左移后应q=4'b0111;
#10
clk = 1'b0;
#10
clk = 1'b1;//第4个时钟上升沿,执行左移,左移后应q=4'b1111;
#10
clk = 1'b0;
s = 2'b01;//右移
end
always #10 clk = ~clk;
endmodule
1.2.2 仿真文件2
//自己编写的测试文件
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 仿真结果
1.3.1 仿真结果对q赋初值
reg [3:0] q=4’b0000;
将结果转换成二进制,便于观察
1.3.2 未对q赋初值
将结果转换成二进制,便于观察
2 使用74x194IP核实现11001序列发生器
2.1 分析
所有反馈逻辑是
74x194的连接
2.2 设计文件
1.先把IP核添加进来,点击Settings 在弹出的窗口中选 择点击左侧的IP图标点击库管理(Repository Manager)页框在库管理页框中点击“+”图标增加IP目录
2.选择设计好了的p_74x194工程目录,目录被加载进来,有一个IP
3.点击流程导航下工程项下的IP目录( IP Catalog),就可以看见刚刚添加的“p_74x194_0”IP核 。
4.双击p_74x194_0 弹出IP窗口。可以看到该IP核的逻辑符号如图所示。这个窗口可以用来编辑IP实例组件的名称。点击ok实例化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];//反馈函数lin=q2'+q1'
assign led=lin;//可以将q[n]送到输出也是可实现11001序列
p_74x194_0 uut( //调用IP核
.clk(clk),
.clr_l(1), //清零端无效
.rin(0), //74x194 rin接地
.lin(lin), //左移输入端等于q2'+q1'
.s(s), //左移方式,s=2'b10
.d(0), //数据输入端可以接任意值
.q(q) //输出送q
//需要对p_74x194.v中的q赋初值,因为后面会用
);
endmodule
2.3 仿真文件
与4.1 时钟同步状态机的设计中的seq_11001_1仿真文件一样文章来源:https://www.toymoban.com/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 仿真结果
文章来源地址https://www.toymoban.com/news/detail-499301.html
到了这里,关于4.3 移位寄存器的实现和应用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!