|
楼主 |
发表于 2021-10-9 14:04:12
|
显示全部楼层
偶分频50%占空比,还可以采用最高bit位输出法:
/**
* @Author Joe_Liang
* @Date 2021/10/9 14:02
* @Version 1.0
*/
import chisel3._
import chisel3.util._
class MSBDivFreq(val N:Int) extends Module{
val io = IO(new Bundle{
val clk_div = Output(Bool())
})
require(N>1,"N必须大于1")
withReset(reset.asAsyncReset()) {
val cnt = RegInit(0.U(log2Ceil(N).W)) //计数范围0~N-1
when(cnt === (N-1).U) {
cnt := 0.U
}.otherwise {
cnt := cnt + 1.U
}
io.clk_div := cnt(log2Ceil(N) - 1) //最高bit位
}
}
举例分析:
最大计数长度为8的计数器即从0计数到7,需要的bit位数是log2Ceil(8)=3,最高位为bit(2)
000~011 100~111 对于bit(2)来说,前四个时钟周期0,后四个周期为1,但计数器值判断时用cnt === (8-1).U则cnt := 0.U,输出始终是out:=cnt(2),
这样前四个时钟000~011输出为0,后四个时钟100~111输出为1,占空比为50%的输出 |
|