|
一个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
|