从现有的Chisel代码生成Verilog代码的最简单方法是什么?
我是否必须创建自己的构建文件?
例如,从一个独立的scala文件(AND.scala),如下所示..
import Chisel._
class AND extends Module {
val io = IO(new Bundle {
val a = Bool(INPUT)
val b = Bool(INPUT)
val out = Bool(OUTPUT)
})
io.out := io.a & io.b
}
Run Code Online (Sandbox Code Playgroud)
我在ubuntu 16.4下安装了完整的Chisel3工具链.
我正在学习Chisel,遵循Github上的文档
到目前为止,一切都完美无瑕.但我坚持第13章 "功能模块创建"
我无法让代码工作.我在凿子模板项目的副本中创建了所有的.scala类.以下是我编写/复制以创建具有可变位宽的Mux4的内容:
/ chisel-template/src/main/scala/Mux4.scala
import Chisel._
class Mux4(w: Int) extends Module {
val io = IO(new Bundle {
val sel = UInt(INPUT, 2)
val in0 = UInt(INPUT, w)
val in1 = UInt(INPUT, w)
val in2 = UInt(INPUT, w)
val in3 = UInt(INPUT, w)
val out = UInt(OUTPUT, w)
})
io.out := Mux2(io.sel(1),
Mux2(io.sel(0), io.in0, io.in1),
Mux2(io.sel(0), io.in2, io.in3))
}
class Mux2(w: Int) extends Module {
val io = IO(new …Run Code Online (Sandbox Code Playgroud) 跟进从可变参数模板数组引用构造函数初始化双重嵌套的 std::array
我有一Matrix门课可以做一些数学。但这纯粹是关于初始化......
Matrix
// helper functions
template <std::size_t N, typename T, std::size_t... Is>
std::array<T, N> to_array_impl(const T (&arr)[N], std::index_sequence<Is...>) {
return std::array<T, N>{arr[Is]...};
}
template <std::size_t N, typename T>
std::array<T, N> to_array(const T (&arr)[N]) {
return to_array_impl(arr, std::make_index_sequence<N>{});
}
// Matrix
template <std::size_t N, std::size_t M, typename T>
class Matrix{
public:
template <typename... TArgs,
std::enable_if_t<sizeof...(TArgs) == N &&
(std::is_same_v<T, std::remove_reference_t<TArgs>> &&...), int> = 0>
Matrix(TArgs const(&&... rows)[M]) : data_{to_array(rows)...} {}
// ...
private:
std::array<Vector<M,T>, N> …Run Code Online (Sandbox Code Playgroud)