4.3 移位寄存器的实现和应用

移位寄存器的实现和应用

  • 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)是一种在若干相同时间脉冲下工作的以触发器为基础的器件,数据以并行或串行的方式输入到该器件中,然后每个时间脉冲依次向左或右移动一个比特,在输出端进行输出。这种移位寄存器是一维的,事实上还有多维的移位寄存器,即输入、输出的数据本身就是一些列位。实现这种多维移位寄存器的方法可以是将几个具有相同位数的移位寄存器并联起来。
参考文档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仿真文件一样

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://uudwc.com/A/x1gm

原文地址:https://blog.csdn.net/weixin_42454243/article/details/124694133

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请联系站长进行投诉反馈,一经查实,立即删除!

h
上一篇 2023年06月15日 23:23
51单片机ADC模数转换
下一篇 2023年06月15日 23:23