一、代码设计
- chisel代码
import chisel3._
import chisel3.util._
import chisel3.stage._
class EdgeDetect(resetValue: Option[UInt] = None) extends Module {
val io = IO(new Bundle {
val in = Input(UInt(1.W))
val pos = Output(UInt(1.W))
val neg = Output(UInt(1.W))
})
val reg = if (resetValue.isDefined) { // resetValue = Some(number)
RegInit(resetValue.get)
} else { //resetValue = None
Reg(UInt())
}
reg := io.in
when((reg===0.U)&&(io.in===1.U)){
io.pos := 1.U
io.neg := 0.U
}.elsewhen((reg===1.U)&&(io.in===0.U)){
io.pos := 0.U
io.neg := 1.U
}.otherwise {
io.pos := 0.U
io.neg := 0.U
}
}
// Generate the Verilog code
object EdgeDetectMain extends App {
println("Generating the EdgeDetect hardware")
(new chisel3.stage.ChiselStage).execute(Array("--target-dir", "generated"),
Seq(ChiselGeneratorAnnotation(() => new EdgeDetect(Some(1.U)))))
}
- 生成的verilog代码主体部分
module EdgeDetect(
input clock,
input reset,
input io_in,
output io_pos,
output io_neg
);
`ifdef RANDOMIZE_REG_INIT
reg [31:0] _RAND_0;
`endif // RANDOMIZE_REG_INIT
reg reg_; // @[EdgeDetect.scala 14:16]
wire _T_5 = reg_ & ~io_in; // @[EdgeDetect.scala 24:27]
assign io_pos = ~reg_ & io_in; // @[EdgeDetect.scala 21:21]
assign io_neg = ~reg_ & io_in ? 1'h0 : _T_5; // @[EdgeDetect.scala 21:37 EdgeDetect.scala 23:16]
always @(posedge clock) begin
reg_
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?