risc-v中文社区

 找回密码
 立即注册
查看: 1244|回复: 1

[原创] chisel计数器

[复制链接]

347

主题

564

帖子

2237

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2237
发表于 2021-8-19 16:49:58 | 显示全部楼层 |阅读模式
计数器是最基本的时序电路之一,计数器一般就是寄存器的输出连接
到加法器,而加法器的输出连到寄存器输入。比如4位寄存器能计数从
0到15,再加1就绕回到0:
val cntReg = RegInit(0.U(4.W))
cntReg := cntReg + 1.U
如果需要启动条件则:
val cntReg = RegInit(0.U(4.W))
when(event) {
  cntReg := cntReg + 1.U
}

class CntRegTest(n:Int) extends MultiIOModule {
  val io = IO(new Bundle {  //用IO定义的信号是verilgo模块的输入输出信号,没用IO定义的比如下面val FAs,val sum则是verilog的wire,verilog的reg信号需要用Reg来定义
    val A    = Input(UInt(n.W))
    val B    = Input(UInt(n.W))
    val out = Output(UInt(n.W))
  })
  val cntreg = RegInit(io.A,0.U(n.W))
  cntreg := cntreg + 1.U
  io.out := cntreg
}
结果发现:
al cntreg = RegInit(io.A,0.U(n.W))这句编译没问题但RUN时出现:
chisel3.package$ExpectedChiselTypeException: reg type 'UInt<4>(IO in unelaborated CntRegTest)' must be a Chisel type, not hardware

修改为:
//chiselTypeOf(硬件类型)的返回值是chisel类型
  val cntreg = RegInit(chiselTypeOf(io.A),0.U)//其实RegInit(chiselTypeOf(io.A),0.U(n.W))也是运行OK 可以自动推断宽度
  cntreg := cntreg + 1.U
  io.out := cntreg
则运行成功。
查看verilog文件内容如下:
module CntRegTest(
  input        clock,
  input        reset,
  input  [3:0] io_A,
  input  [3:0] io_B,
  output [3:0] io_out
);
  reg [3:0] cntreg; // @[CntRegTest.scala 11:23]
  reg [31:0] _RAND_0;
  wire [3:0] _T_1 = cntreg + 4'h1; // @[CntRegTest.scala 12:20]
  assign io_out = cntreg; // @[CntRegTest.scala 13:10]
  always @(posedge clock) begin
    if (reset) begin
      cntreg <= 4'h0;
    end else begin
      cntreg <= _T_1;
    end
  end
endmodule

回复

使用道具 举报

347

主题

564

帖子

2237

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2237
 楼主| 发表于 2021-9-8 13:33:00 | 显示全部楼层
还有一种计数器代码如下:
import chisel3._
class Counter(size:Int) extends Module { //size表示计数器可达到的最大计数值
  val io = IO(new Bundle {
      val ticker = Output(UInt(log2Ceil(size).W))  //log2Ceil(size):表示size-1值需要的位宽,如果要求数值size所需要的位宽则log2Ceil(size+1)
  }
  val r = RegInit(0.U(log2Ceil(size).W))
   r := r +1.U
  io.ticker := r
}
回复

使用道具 举报

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

本版积分规则



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

GMT+8, 2024-5-3 09:41 , Processed in 0.021930 second(s), 17 queries .

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

Copyright © 2018-2021, risc-v open source

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