Chisel: новый HDL-язык
2013-12-02 13:10Рождается новый симпатичный язычок для разработки хардвера: Chisel. Порождает код на Verilog, не уступающий по качеству написанному вручную, а также cycle-accurate симулятор на Си++, работающий в восемь раз быстрее чем Synopsys VCS. Сделан на основе языка Scala. Пример кода:
Мне кажется, эта штука должна вытеснить SystemC на ура. Из документации есть DAC2012 Introduction Paper (PDF) и Chisel Tutorial (PDF).
import Chisel._
class GCD extends Module {
val io = new Bundle {
val a = UInt(INPUT, 16)
val b = UInt(INPUT, 16)
val e = Bool(INPUT)
val z = UInt(OUTPUT, 16)
val v = Bool(OUTPUT)
}
val x = Reg(UInt())
val y = Reg(UInt())
when (x > y) { x := x - y }
unless (x > y) { y := y - x }
when (io.e) { x := io.a; y := io.b }
io.z := x
io.v := y === UInt(0)
}
object Example {
def main(args: Array[String]): Unit = {
chiselMain(args, () => Module(new GCD()))
}
}Мне кажется, эта штука должна вытеснить SystemC на ура. Из документации есть DAC2012 Introduction Paper (PDF) и Chisel Tutorial (PDF).

no subject
Date: 2013-12-02 23:42 (UTC)no subject
Date: 2013-12-02 23:45 (UTC)no subject
Date: 2013-12-03 00:02 (UTC)no subject
Date: 2013-12-03 00:27 (UTC)no subject
Date: 2013-12-03 07:13 (UTC)О, а там еще есть === и ==
no subject
Date: 2013-12-03 10:06 (UTC)no subject
Date: 2013-12-02 23:57 (UTC)no subject
Date: 2013-12-03 00:31 (UTC)module Risc(input clk, input reset, input io_isWr, input [7:0] io_wrAddr, input [31:0] io_wrData, input io_boot, output io_valid, output[31:0] io_out ); wire[31:0] T0; wire[31:0] T1; wire[31:0] rc; wire[31:0] T2; wire[31:0] T3; wire[31:0] T4; wire[31:0] T5; wire[31:0] rb; wire[31:0] T6; reg [31:0] file [255:0]; wire[31:0] T7; wire[31:0] T8; wire T9; wire T10; wire T11; wire[7:0] rci; wire[31:0] T12; reg [31:0] code [255:0]; wire[31:0] T13; wire[31:0] T14; reg[7:0] pc; wire T15; wire T16; wire T17; wire T18; wire T19; wire[7:0] T20; wire[7:0] T21; wire[7:0] T22; wire[7:0] T23; wire[7:0] rbi; wire[31:0] T24; wire T25; wire[7:0] T26; wire[31:0] ra; wire[31:0] T27; wire[7:0] rai; wire[31:0] T28; wire T29; wire[7:0] T30; wire T31; wire T32; wire[7:0] T33; wire[7:0] op; wire[31:0] T34; wire[15:0] T35; wire[15:0] T36; wire[15:0] T37; wire T38; wire T39; wire[7:0] T40; wire T41; assign io_out = T0; assign T0 = T16 ? rc : T1; assign T1 = {31'h0/* 0*/, 1'h0/* 0*/}; assign rc = T2; assign T2 = T38 ? T34 : T3; assign T3 = T31 ? T5 : T4; assign T4 = {31'h0/* 0*/, 1'h0/* 0*/}; assign T5 = ra + rb; assign rb = T25 ? T24 : T6; assign T6 = file[rbi]; assign T8 = rc; assign T9 = T16 && T10; assign T10 = ! T11; assign T11 = rci == 8'hff/* 255*/; assign rci = T12[5'h17/* 23*/:5'h10/* 16*/]; assign T12 = code[pc]; assign T14 = io_wrData; assign T15 = T18 || T16; assign T16 = ! T17; assign T17 = io_isWr || io_boot; assign T18 = T19 && io_boot; assign T19 = ! io_isWr; assign T20 = T16 ? T22 : T21; assign T21 = {7'h0/* 0*/, 1'h0/* 0*/}; assign T22 = pc + T23; assign T23 = {7'h0/* 0*/, 1'h1/* 1*/}; assign rbi = T12[3'h7/* 7*/:1'h0/* 0*/]; assign T24 = {31'h0/* 0*/, 1'h0/* 0*/}; assign T25 = rbi == T26; assign T26 = {7'h0/* 0*/, 1'h0/* 0*/}; assign ra = T29 ? T28 : T27; assign T27 = file[rai]; assign rai = T12[4'hf/* 15*/:4'h8/* 8*/]; assign T28 = {31'h0/* 0*/, 1'h0/* 0*/}; assign T29 = rai == T30; assign T30 = {7'h0/* 0*/, 1'h0/* 0*/}; assign T31 = T16 && T32; assign T32 = op == T33; assign T33 = {7'h0/* 0*/, 1'h0/* 0*/}; assign op = T12[5'h1f/* 31*/:5'h18/* 24*/]; assign T34 = {16'h0/* 0*/, T35}; assign T35 = T37 | T36; assign T36 = {8'h0/* 0*/, rbi}; assign T37 = rai << 4'h8/* 8*/; assign T38 = T16 && T39; assign T39 = op == T40; assign T40 = {7'h0/* 0*/, 1'h1/* 1*/}; assign io_valid = T41; assign T41 = T16 && T11; always @(posedge clk) begin if (T9) file[rci] <= T8; if (io_isWr) code[io_wrAddr] <= T14; if(reset) begin pc <= 8'h0/* 0*/; end else if(T15) begin pc <= T20; end end endmoduleno subject
Date: 2013-12-03 01:39 (UTC)no subject
Date: 2013-12-03 02:04 (UTC)no subject
Date: 2013-12-04 10:58 (UTC)no subject
Date: 2013-12-03 06:47 (UTC)Chisel: новый HDL-язык
Date: 2013-12-04 06:44 (UTC)no subject
Date: 2013-12-04 06:48 (UTC)no subject
Date: 2013-12-04 10:57 (UTC)Посмотрим.