package simple1
import chisel3._
import chisel3.util._
class Alu extends Module {
val io = IO(new Bundle{
val a = Input (UInt(3.W))
val y = Output (UInt(8.W))
})
//io.y := ~(1 << io.a) ;
var y = Wire (UInt(8.W ))
y:=255.U
switch (io.a){
is(0.U) {y := 1.U }
is(1.U) {y := 2.U }
is(2.U) {y := 4.U }
is(3.U) {y := 8.U }
is(4.U) {y := 16.U }
is(5.U) {y := 32.U }
is(6.U) {y := 64.U }
is(7.U) {y := 128.U }
}
io.y := ~y;
}
object AluMain extends App{
println("Generating the ALU hardware ")
chisel3.Driver.execute(Array("--target-dir","generated"),()=>new Alu())
}
module Alu( // @[:@3.2]
input clock, // @[:@4.4]
input reset, // @[:@5.4]
input [2:0] io_a, // @[:@6.4]
output [7:0] io_y // @[:@6.4]
);
wire _T_12; // @[Conditional.scala 37:30:@10.4]
wire _T_15; // @[Conditional.scala 37:30:@15.6]
wire _T_18; // @[Conditional.scala 37:30:@20.8]
wire _T_21; // @[Conditional.scala 37:30:@25.10]
wire _T_24; // @[Conditional.scala 37:30:@30.12]
wire _T_27; // @[Conditional.scala 37:30:@35.14]
wire _T_30; // @[Conditional.scala 37:30:@40.16]
wire _T_33; // @[Conditional.scala 37:30:@45.18]
wire [7:0] _GEN_0; // @[Conditional.scala 39:67:@46.18]
wire [7:0] _GEN_1; // @[Conditional.scala 39:67:@41.16]
wire [7:0] _GEN_2; // @[Conditional.scala 39:67:@36.14]
wire [7:0] _GEN_3; // @[Conditional.scala 39:67:@31.12]
wire [7:0] _GEN_4; // @[Conditional.scala 39:67:@26.10]
wire [7:0] _GEN_5; // @[Conditional.scala 39:67:@21.8]
wire [7:0] _GEN_6; // @[Conditional.scala 39:67:@16.6]
wire [7:0] y; // @[Conditional.scala 40:58:@11.4]
assign _T_12 = 3'h0 == io_a; // @[Conditional.scala 37:30:@10.4]
assign _T_15 = 3'h1 == io_a; // @[Conditional.scala 37:30:@15.6]
assign _T_18 = 3'h2 == io_a; // @[Conditional.scala 37:30:@20.8]
assign _T_21 = 3'h3 == io_a; // @[Conditional.scala 37:30:@25.10]
assign _T_24 = 3'h4 == io_a; // @[Conditional.scala 37:30:@30.12]
assign _T_27 = 3'h5 == io_a; // @[Conditional.scala 37:30:@35.14]
assign _T_30 = 3'h6 == io_a; // @[Conditional.scala 37:30:@40.16]
assign _T_33 = 3'h7 == io_a; // @[Conditional.scala 37:30:@45.18]
assign _GEN_0 = _T_33 ? 8'h80 : 8'hff; // @[Conditional.scala 39:67:@46.18]
assign _GEN_1 = _T_30 ? 8'h40 : _GEN_0; // @[Conditional.scala 39:67:@41.16]
assign _GEN_2 = _T_27 ? 8'h20 : _GEN_1; // @[Conditional.scala 39:67:@36.14]
assign _GEN_3 = _T_24 ? 8'h10 : _GEN_2; // @[Conditional.scala 39:67:@31.12]
assign _GEN_4 = _T_21 ? 8'h8 : _GEN_3; // @[Conditional.scala 39:67:@26.10]
assign _GEN_5 = _T_18 ? 8'h4 : _GEN_4; // @[Conditional.scala 39:67:@21.8]
assign _GEN_6 = _T_15 ? 8'h2 : _GEN_5; // @[Conditional.scala 39:67:@16.6]
assign y = _T_12 ? 8'h1 : _GEN_6; // @[Conditional.scala 40:58:@11.4]
assign io_y = ~ y; // @[Alu.scala 26:6:@50.4]
endmodule
这里实践一个简单的三八译码器。
要定义val y必须要指定类型,如果直接用别的对象初始化,则就类型就是初始化类型传递过来的。
如果仅仅定义一个没有初始化(或者使用无类型的初始哈比如0.U),则需要定义其类型。
现在我接触的类型有Wire和Reg以及Reginit,后两者是寄存器类型,生成寄存器电路。而Wire也仅仅相当于中间临时连线。
TODO:
1,在CHISEL中,常数的16进制表示法。
2,在CHISEL中,移位操作的云算符。
本文介绍了一个使用Chisel硬件描述语言实现的简单三八译码器设计。通过详细解析Chisel代码,展示了如何定义输入输出信号、使用条件语句以及实现二进制到八进制的转换。此外,还探讨了Wire和Reg类型的区别,以及它们在电路设计中的应用。
1814

被折叠的 条评论
为什么被折叠?



