risc-v中文社区

 找回密码
 立即注册
查看: 1096|回复: 0

[原创] chisel 4级移位寄存器

[复制链接]

347

主题

564

帖子

2237

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2237
发表于 2021-8-20 08:55:48 | 显示全部楼层 |阅读模式
一个4级移位寄存器的图示如下:


从图中可以看到,电路形成了4级延迟,用这个简单移位寄存器做如下:
1)产生一个4位寄存器ShiftRegister
2)合并移位寄存器的低3位到输入din用于下一个寄存器的输入
3)使用最高位的寄存器用于输出
import chisel3._
import chisel3.util._
class ShiftRegModule extends Module{
  val io = IO(new Bundle {
    val din = Input(UInt(1.W))
    val dout = Output(UInt(1.W))
  })
  val shiftReg = Reg(UInt(4.W)) //用chisel类型 UInt定义一个4bit普通寄存器
  shiftReg := Cat(shiftReg(2,0),io.din)
  //shiftReg其实从语法角度来说是UInt,而UInt的父Bits中有一个final def apply(x: Int, y: Int): UInt = macro SourceInfoTransform.xyArg
  //用来返回从y开始到x为止的bit位的数据,也就是说取shiftReg的bit0到bit2共3位,Cat表示将这三位与io.din按高低顺序连接起来:
  //shiftReg[2] shifrReg[1] shiftReg[0] io.din
  io.dout := shiftReg(3)
}
产生的verilog文件内容如下:
module ShiftRegModule(
  input   clock,
  input   reset,
  input   io_din,
  output  io_dout
);
  reg [3:0] shiftReg; // @[ShiftRegModule.scala 10:21]
  reg [31:0] _RAND_0;
  assign io_dout = shiftReg[3]; // @[ShiftRegModule.scala 15:11]
  always @(posedge clock) begin
    shiftReg <= {shiftReg[2:0],io_din};
  end
endmodule

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



Archiver|手机版|小黑屋|risc-v中文社区

GMT+8, 2024-5-4 13:39 , Processed in 0.018623 second(s), 18 queries .

risc-v中文社区论坛 官方网站

Copyright © 2018-2021, risc-v open source

快速回复 返回顶部 返回列表