我是靠谱客的博主 沉默皮带,最近开发中收集的这篇文章主要介绍4.3 移位寄存器的实现和应用0 74x194的介绍1 74x194的实现2 使用74x194IP核实现11001序列发生器,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
移位寄存器的实现和应用
- 0 74x194的介绍
- 1 74x194的实现
- 1.1 设计文件
- 1.2 仿真文件
- 1.2.1 仿真文件1
- 1.2.2 仿真文件2
- 1.3 仿真结果
- 1.3.1 仿真结果对q赋初值
- 1.3.2 未对q赋初值
- 2 使用74x194IP核实现11001序列发生器
- 2.1 分析
- 2.2 设计文件
- 2.3 仿真文件
- 2.4 约束文件
- 2.5 仿真结果
0 74x194的介绍
在数字电路中,移位寄存器(英语:shift register)是一种在若干相同时间脉冲下工作的以触发器为基础的器件,数据以并行或串行的方式输入到该器件中,然后每个时间脉冲依次向左或右移动一个比特,在输出端进行输出。这种移位寄存器是一维的,事实上还有多维的移位寄存器,即输入、输出的数据本身就是一些列位。实现这种多维移位寄存器的方法可以是将几个具有相同位数的移位寄存器并联起来。
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 分析
2.2 设计文件
1.先把IP核添加进来,点击Settings 在弹出的窗口中选 择点击左侧的IP图标点击库管理(Repository Manager)页框在库管理页框中点击“+”图标增加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仿真文件一样
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 仿真结果
最后
以上就是沉默皮带为你收集整理的4.3 移位寄存器的实现和应用0 74x194的介绍1 74x194的实现2 使用74x194IP核实现11001序列发生器的全部内容,希望文章能够帮你解决4.3 移位寄存器的实现和应用0 74x194的介绍1 74x194的实现2 使用74x194IP核实现11001序列发生器所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复