verliog and FPGA实验小记----------实验六:移位寄存器

一.实验目的

  1. 掌握移位寄存器的工作原理和设计方法。
  2. 理解串并数据转换的概念和方法。

二.实验环境

  1. 装有ModelSim和ISE的计算机。
  2. Sword实验系统。

三.实验任务

  1. 用VerilogHDL语言设计实现8位带并行输入的右移移位寄存器,在ModelSim上实现功能仿真。
  2. 生成FPGA设计文件,下载到Sword实验系统上验证电路功能。

四.实验原理

  1. 实验原理
    在移位寄存器中,要求每来一个时钟脉冲,寄存器中的数据就会按顺序向左或者向右移动一位。因此,在构成移位寄存器时,必须采用主-从触发器或者边沿触发器,而不能采用电平触发器。
    数据输入移位寄存器的方式有串行输入和并行输入两种。下图是串行输入移位寄存器。在时钟的作用下,输入数据进入移位寄存器最左位,同时,将已存入寄存器的数据右移一位。并行输入方式是把全部输入数据同时存入寄存器。
    在这里插入图片描述
    图1 串行输入的移位寄存器

下图是具有串行和并行输入的8位右移移位寄存器模块。
在这里插入图片描述

图2 具有并行输入的移位寄存器

通过并行输入命令选择是串行输入还是并行输入。

五.实验步骤

1. 添加clk_div.v、LED_P2S.ngc、LED_P2S_IO.v、shifter_top.v、shifterIO.ucf到项目中。
2. 新建shiftregist1.v文件,写以下代码
module shiftregist1(D,clk,reset,Q);
	parameter shiftregist_width = 8;
	output [shiftregist_width-1:0] D;
	input [shiftregist_width-1:0] Q;
	input clk,reset;
	reg [shiftregist_width-1:0] D;
initial
	D=8'b00001111;
	always @(posedge clk or negedge reset)
		if(!reset)
			D<=Q;
		else
			D<={D[shiftregist_width-2:0],D[shiftregist_width-1]};
endmodule
3. 添加P2S.ngc,parallel2serial.v(并串转换文件)到项目中。

注意: 移位寄存器既可以实现并行输出(按位的顺序逐一显示),也可以实现串行输出(每个输出同时读出)。

4. 新建文件,编写数码管译码文件
module Seg8BCD(out, in);
   output [7:0] out;
	input [3:0] in;
	reg [7:0] out;
	always@(in)
	    begin
		    case(in)
				4'h0: out = 8'b00000011;
				4'h1: out = 8'b10011111;
				4'h2: out = 8'b00100101;
				4'h3: out = 8'b00001101;
				4'h4: out = 8'b10011001;
				4'h5: out = 8'b01001001;
				4'h6: out = 8'b01000001;
				4'h7: out = 8'b00011111;
				4'h8: out = 8'b00000001;
				4'h9: out = 8'b00001001;
				4'hA: out = 8'b00010001;
				4'hB: out = 8'b11000001;
				4'hC: out = 8'b01100011;
				4'hD: out = 8'b10000101;
				4'hE: out = 8'b01100001;
				4'hF: out = 8'b01110001;
		      default: out = 8'hFF;
			endcase
		end
endmodule
5. 修改shifter_top.v文件

在这里插入图片描述
注意

  • sw[0] :开关0复位
  • sw[1:8]:通过开关1~8进行输入数据
  • DIV[25]:时钟的频率,数字越大,越慢
  • 8位数码管可以看成是8个小灯泡(其中一个小灯泡是8后面的小数点),所以输出8位的数据
  • 由于我们的实验目的是想让8个数码管实现流水显示0,1,也就是说每个数码管只用显示0或1,即一位输入足以实现
  • 记得调用并串转换模块,即P2S开头的那一段调用
6. 检查约束文件,确保LED与数码管的约束文件没有被注释

在这里插入图片描述

7. 编写testbench文件
module shift_test();
  wire [7:0]D;
  reg [7:0]Q;
  reg clk,reset;
  always # 20 clk = ~clk;
  shiftregist1 u2(D,clk,reset,Q);
  initial
    begin
        clk = 0;   
        reset = 1;                 
    end
endmodule;
8. 仿真,波形如下:

在这里插入图片描述
目录截图如下:
在这里插入图片描述

原创文章 42 获赞 32 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_39671159/article/details/84586371
今日推荐