本文主要是介绍【chisel】如何用chisel写一个上升沿检测程序,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
自定义上升沿检测
class RisingEdgeDetector extends Module {val io = IO(new Bundle {val inSig = Input(Bool())val outSig = Output(Bool())val clock = Input(Clock())})// 定义 risingedge 函数def risingedge(x: Bool): Bool = x && !RegNext(x)// 使用 risingedge 函数检测上升沿io.outSig := risingedge(io.inSig)// Chisel 会为 RegNext 自动生成一个寄存器来保存 inSig 的值// 并在下一个时钟周期提供这个值
}
实现主程序
package helloimport chisel3.{Clock, _}
class RisingEdgeDetector extends Module {val io = IO(new Bundle {val inSig = Input(Bool())val outSig = Output(Bool())})// 定义 risingedge 函数def risingedge(x: Bool): Bool = x && !RegNext(x)// 使用 risingedge 函数检测上升沿io.outSig := risingedge(io.inSig)// Chisel 会为 RegNext 自动生成一个寄存器来保存 inSig 的值// 并在下一个时钟周期提供这个值
}class risingedge extends Module {val io = IO(new Bundle {val detectedRisingEdge = Output(Bool()) // IO names will be the sameval someBoolSignal = Input(Bool()) // (without 'io_' in prefix)})// 创建 RisingEdgeDetector 模块的实例val detector = Module(new RisingEdgeDetector)// 连接输入和输出detector.io.inSig := io.someBoolSignal // 这里的 someBoolSignal 应该是你的设计中的一个 Bool 类型的信号io.detectedRisingEdge := detector.io.outSig // 这将是一个 Bool 类型的信号,表示上升沿的检测结果
}
object risingedgeMain extends App {(new chisel3.stage.ChiselStage).emitVerilog(new risingedge(), Array("--target-dir", "generated"))
}
运行以上chisel,生成Verilog如下
module RisingEdgeDetector(input clock,input io_inSig,output io_outSig
);reg _T; // @[risingedge.scala 11:48]wire _T_1 = ~_T; // @[risingedge.scala 11:40]assign io_outSig = io_inSig & _T_1; // @[risingedge.scala 14:13]always @(posedge clock) begin_T <= io_inSig;end
endmodulemodule risingedge(input clock,input reset,output io_detectedRisingEdge,input io_someBoolSignal
);wire detector_clock; // @[risingedge.scala 26:24]wire detector_io_inSig; // @[risingedge.scala 26:24]wire detector_io_outSig; // @[risingedge.scala 26:24]RisingEdgeDetector detector ( // @[risingedge.scala 26:24].clock(detector_clock),.io_inSig(detector_io_inSig),.io_outSig(detector_io_outSig));assign io_detectedRisingEdge = detector_io_outSig; // @[risingedge.scala 29:25]assign detector_clock = clock;assign detector_io_inSig = io_someBoolSignal; // @[risingedge.scala 28:21]
endmodule
这篇关于【chisel】如何用chisel写一个上升沿检测程序的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!