问题标签 [asic]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
verilog - 除以 2 时钟和相应的复位产生
我的问题是关于在verilog中使用生成一个可合成的2时钟分频和相应的复位。
我们可以使用 verilog 生成一个除以 2 的时钟,如下所示
我的问题是如何使用 rst_n 生成相应的复位(由使用 clk_tx 的触发器使用)
任何人都可以帮助我。
我感谢您的帮助
for-loop - 实现 FOR-LOOP 和 FOR-GENERATE 之间的实际区别是什么?什么时候使用一个比另一个更好?
假设我必须在 std_logic_vector 上测试不同的位。实现一个单一的进程,每个位的for循环或使用for-generate实例化'n'个进程,每个进程测试一个位会更好吗?
FOR循环
生成
在这种情况下,对 FPGA 和 ASIC 实施有何影响?CAD工具容易处理什么?
编辑:只需添加我给一个帮助者的回复,以使我的问题更清楚:
例如,当我在 ISE 上使用 for 循环运行一段代码时,综合摘要给了我一个公平的结果,需要很长时间来计算所有内容。当我重新编码我的设计时,这次使用 for-generate 和几个进程,我使用了更多的区域,但是该工具能够更快地计算所有内容,并且我的计时结果也更好。那么,它是否暗示了一个规则,即使用 for-generates 总是更好,代价是额外的面积和较低的复杂性,还是我必须验证每一个实现可能性的情况之一?
verilog - 创建不同宽度的脉冲
我编写了以下代码,它产生不同宽度的脉冲。我希望代码根据选择线产生单个脉冲。如果选择线是
00 脉冲宽度 = 1 us,01 脉冲宽度 = 10 us。. 11 脉冲宽度 = 1000 us
输入时钟为 10 Mhz。但是根据代码,如果我不提供选择线的任何其他值,我会得到连续脉冲。我怎样才能只实现一个脉冲?
考虑到电路的综合和硬件,这段代码是否具有良好的编码风格?如果不是我应该应用哪些更改?...
python - 使用 Python 进行 IC 设计/验证
我看到这个领域的很多工作都要求有 Perl 和 Python 脚本编写经验。如果有的话,很少有 C 编程。其中 HDL 是主要关注点(verilog、VHDL)以及数字系统设计知识。
在这些工作角色中,Python 通常是作为行业标准还是“非官方标准”使用?我对 Python 没有什么经验,我做的是数学/科学应用程序,它最有用的应用程序。
有没有人在这个工作领域对 Python 有很多经验,并且知道它是否对基于许可证的软件/工具完全有益?
vhdl - 在一次模拟中读取可变长度输入的有效综合方法
我是 vhdl 的新手,我有一个找不到答案的问题。
我正在尝试实现一些在 1024 位长的向量上运行的算法。所以我必须从文件中读取数据并将它们插入到这个 temp_vector(1023 downto 0) 中。
该文件包含许多输入,并且对于每个输入,算法都对前一个的输出进行操作。问题是这个输入数据的长度不是恒定的,而是每个输入长度在0到16000之间变化。
在每个周期中,我只能从我的测试台读取 64 位并插入它们。在特定时刻,我还必须将可变长度的位序列附加到已插入的数据中。我使用整数 bit_position 来跟踪我插入数据的 temp_vector 的最后位置,并使用整数 data_in_length 来告诉我在每个周期中读取的数据的实际长度。
在 temp_vector 已满或我完成插入所有输入后,我停止读取并且算法在 temp_vector 上运行,然后从文件中继续读取。
我在模拟中得到了正确的结果。我遇到的问题是 FPGA 和 ASIC 综合。它与输入数据的不同长度有关。我想出了两种方法来读取文件并将数据插入 temp_vector。第一的
第二个
第二种方法是在 FPGA 中工作,但它会花费大量时间并消耗太多逻辑元素,并且对于设计编译器,它会返回一个错误,即范围必须是恒定的。
第一个也在 FPGA 中工作并且在 ASIC(设计编译器)中没有返回错误,但是对于 ASIC,它永远运行(我让它在一夜之间运行)。它卡在包含第一个代码的实体的第 1 遍映射的开头。
我希望我对我的问题进行了充分的解释,并且非常感谢有关如何以更有效的方式实现它的一些想法。
我认为我不能使用泛型,因为文件是一次性读取和操作的,所以在模拟过程中长度会发生变化。我也考虑过移位,但由于移位值每次都会改变,我想它仍然会消耗大量时间/面积。
最后我的整个方法可能是错误的吗?我的意思是,对于 FPGA,尤其是对于 ASIC,我是否可能需要处理特定的输入大小?这意味着我应该尝试编写和合成不适用于我的所有文件的代码,但只适用于某些指定大小的输入。
非常感谢您抽出宝贵时间。
verilog - 输入输出端口的确切标准是什么,有时输入输出和输出端口可以在 Verilog 中互换使用?
在下面的模块中,理想情况下,cnt、width 和 start 应该是 inout 端口,而不是输出端口。
但我尝试将这些端口作为输出端口,但我仍然可以运行它而不会出现任何错误。那么在 Verilog 中 inout 和 output 端口可以互换使用吗?
如果不是,那么确切的标准是什么,必须使用 inout 端口(在这种情况下不能使用输出端口)?
注意 - 我知道,对于 inout 端口,我需要修改代码,因为 inout 端口不能是 reg 类型。但我在这里只询问端口类型。
verilog - how to write a restore reset formal test which has a long timing
I used to verify a module that consists of a serial port with a set of registers by dynamic tests. One of the test is a restore reset test. The timing sequence is (i) write a random data into a register from serial port (took 40 clock cycles) (ii) put this register in reset and release it (iii) read this register from serial port (took another 40 clock cycles)
This is easily implemented in a dynamic test. Now I want to write this timing formally, but I found formal tools struggled to determine this assertion as the timing is so long, about 82 cycles, the formal tools could not explore so many space states. Is it possible to write such a test formally?
Moreover, the common reset formal test is simple, which takes 1 cycle only, the formal tool start to explore the space states from the state of reset. But now I am trying write a test that saying after the DUT did something, put the reg in reset, read it out, the value is still the reset value.
system-verilog - 在重置感知 always_ff 块中不重置寄存器的含义是什么?
不在复位感知 always_ff 块内复位触发器的后果是什么?
示例 1:
示例 2:
示例 1 和示例 2 之间的唯一区别是,在示例 2 中,reg_b 没有任何重置条件。这个后端/综合错误的后果是什么?我有前端 RTL 设计背景,在合成方面经验很少。所以,我试图理解为什么上面的示例 2 是一个不好的做法。
一个明显的问题是 - 在示例 2 中重置 reg_b 之后将是 X。因此,如果 reg_b 用于任何控制逻辑,那么它可能会在设计中引入错误。除此之外,这还会产生什么其他问题?
verilog - 如何在 Verilog 中进行矩阵乘法?
我正在尝试将1x3 * 3X64
矩阵相乘,因为矩阵中的每个值都是十进制数,所以对于每个值,我所取4
的位是一次4x64
访问4
每行的总位的位。
我试图概括它。
矩阵的形式1x3 [2,4,3]
为 &
3*64(64 decimal value in each row)
第1行[11111111111111111111111111111(64)]
第 2 行[11111111(8)22222222(8).....88888888(8)]
第 3 行[1234567812345678.......................12345678]
我试过的代码
我需要这个的广义形式..
我得到的错误:
错误:HDLCompilers:110 -“mat.v”第 36 行向量线“h1”的部分选择中的最低有效位操作数是非法的