- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
你可能知道 Verilog 中的“output reg”,非常有用的功能。
但在 Chisel 中我找不到如何做类似的事情。当我需要寄存器输出时,我应该这样做:
package filter
import chisel3._
class TestReg extends Module {
val io = IO( new Bundle {
val din = Input(SInt(32.W))
val ena = Input(Bool())
val dout = Output(SInt())
})
val dout = RegInit(0.S(32.W))
when (io.ena) {
dout := io.din + 77.S
}
io.dout <> dout
}
是否有更“简短”的方法来创建输出注册表?
我正在寻找的是在 IO 包中定义 Reg 并将其写入寄存器
像这样的事情:
class TestReg extends Module {
val io = IO( new Bundle {
val din = Input(SInt(32.W))
val ena = Input(Bool())
val dout = Output(RegInit(0.S(32.W)))
})
when (io.ena) {
io.dout := io.din + 77.S
}
}
最佳答案
Bundle
中不允许使用寄存器,以保持其作为接口(interface)的纯粹性。它们比 Verilog 95/2001 端口声明更接近 SystemVerilog 结构。
对于现有的库,执行您想要的操作的最简单方法是使用 RegNext
:
io.dout := RegNext(io.din + 77.S, 0.S(32.W))
注意:在 FIRRTL 编译器推断出宽度之前,这不会设置 io.dout 的宽度。如果您尝试获取某些内容的 io.dout 宽度,有时这可能会导致问题。
忽略标准库,您还可以通过定义自己的实用程序来以两种可能的方式之一创建注册连接,从而更手动地执行此操作:
object ConnectionUtilities {
def regConnect(lhs: Data, rhs: Data): Unit = {
val rhsReg = Reg(chiselTypeOf(rhs))
rhsReg := rhs
lhs := rhsReg
}
}
这样,您就可以使用此方法进行连接并生成必要的寄存器:
import ConnectionUtilities.regConnect
regConnect(io.out, io.in + 77.S)
Data
。这是更高级的,并且有可能使阅读您代码的人感到困惑。但是,它允许您使用您自己的领域特定语言来扩展 Chisel 领域特定语言。object ConnectUtilities2 {
implicit class DataWithRegConnect(lhs: Data) {
def `:=r` (rhs: Data): Unit = {
val rhsReg = Reg(chiselTypeOf(rhs))
rhsReg := rhs
lhs := rhsReg
}
}
}
然后您可以使用这个新方法(请注意,这需要反引号,因为 :=r
本身并不是合法名称)。
import ConnectUtilities2.DataWithRegConnect
io.dout `:=r` (io.din + 77.S)
关于hdl - 如何在Chisel中正确定义输出Reg,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62388061/
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 去年关闭。
你可能知道 Verilog 中的“output reg”,非常有用的功能。 但在 Chisel 中我找不到如何做类似的事情。当我需要寄存器输出时,我应该这样做: package filter impo
你可能知道 Verilog 中的“output reg”,非常有用的功能。 但在 Chisel 中我找不到如何做类似的事情。当我需要寄存器输出时,我应该这样做: package filter impo
我总是使用默认分配来构建我的设计,因为它使我的代码行数更少并且我认为更具可读性。但是,我了解到默认分配有时会很麻烦。如果没有足够的设计空间,工具(Vivado、ISE)可以移除那部分。我的意思是默认赋
我一直有点想制作自己的微处理器..我读过 How can I make my own microcontroller? . 我多次尝试学习一些 Verilog 和 VHDL。但对于我的一生来说,我就是
大家,只是一个关于如何修复以下 Verilog 代码的简单问题,我不断收到错误。有什么建议吗? module bcd_to_seven_seg( B, S); input wire [3:0]B; o
我是一名自学成才的嵌入式开发人员。我主要使用用 C 和 ASM 编程的 AVR,但我也涉足过其他系统。我希望转向更复杂的设备,如 CPLD 和 FPGA,但我不知道从哪里开始。所以我的一个半问题是:
Chisel3 HDL语言是否可以进行形式验证? 如果是,是否有开源软件可以做到这一点? 我知道我们可以使用 Yosys 进行 verilog 形式验证,但是使用 chisel ? 最佳答案 Spac
如何在 HDL 中使用数组(代表总线)? 例如,我有以下代码: /** * 16-bit bitwise And: * for i = 0..15: out[i] = (a[i] and b[i]
我有 2 个模块使用相同的时钟但在不同的文件中,当我在模块 B 中采样来自模块 A 的信号时,在波形仿真中它没有像它应该的那样在一个时钟周期后获得样本,它表明是同一上升沿的样本(适合异步实例化的行为)
我找到了两个不同的来源,它们以两种不同的方式解释了 Verilog HDL 中的惯性延迟。 1) 第一个表示任何短于指定延迟的输入信号都将被忽略。 2) 第二个表示,如果其中一个输入发生变化,输出信号
这是我运行的代码,它不生成输出 HDL 文件: from pygears import gear from pygears.typing import Ufixp, Uint from pygears
假设您正在实现一个带有 cpu、ram、rom 和 mmu 的简单 SoC,以将 ram 和 rom 映射到 cpu 的地址空间。在实例化不同的组件时,这样做会更有意义: ram 和 rom 在 mm
此代码是一个按钮防抖器。但我不明白为什么有两个人字拖: reg PB_sync_0; always @(posedge clk) PB_sync_0 <= ~PB; // invert PB to
看起来快要工作了,只是在第 7 行显然搞砸了? /** * 4-way demultiplexor. * {a,b,c,d} = {in,0,0,0} if sel==00 *
也许这很简单,但我不能简单地找到如何在 Chisel 中获取 UInt() 值的位大小? 我知道如何通过声明设置尺寸: val a = UInt(INPUT, 16) 但是要获得“a”大小,是否有类似
该项目旨在构建一个程序计数器。 具体说明如下: // This file is part of www.nand2tetris.org // and the book "The Elements of
这是一个受此问答对启发的问题:call questa sim commands from SystemVerilog test bench 这些问题询问 Verilog 代码如何控制执行模拟器 (Qu
always 关键字(不是 always @ block )和 之间有什么区别Verilog HDL 中的forever 关键字? always #1 a=!a; forever #1 a=!a; 这
我使用 vi 作为编辑器在 Verilog 中编写了一个模块,现在我想测试它。如果我没有董事会,我有什么选择?我怎样才能给我的模块输入?我在哪里可以看到结果?顺便说一下,我可以访问 VCS。 谢谢。
我是一名优秀的程序员,十分优秀!