基于Verilog语言和BASYS3开发板的移位寄存器实验

基于Verilog语言和BASYS3开发板的移位寄存器实验

   闲来无事就想把之前做的实验整理一下,既是自己写博客的尝试,同时希望对后来的学弟学妹以及所有看到这个博客的人有所帮助。
   首先是原理部分,想必做实验的时候各位已经知道寄存器的原理。简而言之就是触发器在收到时钟的脉冲时根据输入改变输出。在下一个改变的数据到来之前输出不会改变,就相当于是存储了数据。
代码部分
用的是参考书上的代码,如有雷同,那可能是因为用的同一个书吧。XD
module shift_register( //移位寄存器实现
  input btn,
   input [10:0] sw,
   output [7:0] led //输出8位reg数据作为数码的输入
   );
  wire clk;
  assign clk=btn; //设置初值
  wire[7:0] data_in;//低8位用做数据输入
  wire[1:0] select;//高两位用作功能选择
  wire res; //设置开关
  assign   {res,select,data_in}=sw;
  reg[7:0] q;
   always@(posedge clk,posedge res)//设置初值
  if(res) q<=data_in;
   else begin
   case(select)
   0:q<={1’b0,q[7:1]};//逻辑右移
   1:q<={q[6:0],1’b0};//逻辑左移
  2:q<={q[0],q[7:1]};//循环右移
  3:q<={q[6:0],q[7]};//循环左移
  endcase
end
assign led=q;
Endmodule
然后是数码显示的代码
module segled(
   input [7:0] q,
  input clk,
  output reg [6:0]a_to_g,
  output dp,
  output reg [3:0] an
);
   reg count;
   parameter update_interval = 50000000 / 80 - 1;
  integer selcnt;
  always @(posedge clk) //分频50Hz
  begin
  selcnt <= selcnt + 1;

     if (selcnt == update_interval)  
     begin  
         selcnt <= 0;  
         count <= count + 1;  
     end  
end  
reg [3:0]digit;
always @(*) //选择位
case(count)
   0:begin digit=q[3:0];an=4'b1110;end
   1:begin digit=q[7:4];an=4'b1101;end  
endcase
always @(*)//显示段数
case(digit)
   0:a_to_g=7'b0000001;
   1:a_to_g=7'b1001111;
   2:a_to_g=7'b0010010;
   3:a_to_g=7'b0000110;
   4:a_to_g=7'b1001100;
   5:a_to_g=7'b0100100;
   6:a_to_g=7'b0100000;
   7:a_to_g=7'b0001111;
   8:a_to_g=7'b0000000;
   9:a_to_g=7'b0000100;
  'hA:a_to_g=7'b0001000;
  'hB:a_to_g=7'b1100000;
  'hC:a_to_g=7'b0110001;
  'hD:a_to_g=7'b1000010;
  'hE:a_to_g=7'b0110000;
  'hF:a_to_g=7'b0111000;

  default:a_to_g=7’b0000001;
   endcase
endmodule
最后加一个top模块 把这两个模块整合在一起就好了。博客排版不太会用,等熟悉下再写下一个吧。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值