在实施HDL代码时应该遵循哪些最佳实践?
与更常见的软件开发领域相比,有哪些共性和差异?
如何在Verilog中声明和使用1D和2D字节数组?
例如.怎么做像
byte a_2D[3][3];
byte a_1D[3];
// using 1D
for (int i=0; i< 3; i++)
{
a_1D[i] = (byte)i;
}
// using 2D
for (int i=0; i< 3; i++)
{
for (int j=0; j< 3; j++)
{
a_2D[i][j] = (byte)i*j;
}
}
Run Code Online (Sandbox Code Playgroud) 我很难理解verilog中的以下语法:
input [15:0] a; // 16-bit input
output [31:0] result; // 32-bit output
assign result = {{16{a[15]}}, {a[15:0]}};
Run Code Online (Sandbox Code Playgroud)
我知道assign声明会result使用连线和组合逻辑将某些东西连接到总线,但是花括号和16 {a [15]}是什么?
我在网上看过,讨论/例子似乎是传统的软件开发.由于Verilog和VHDL(用于芯片设计,例如FPGA和ASIC)类似于软件开发C和C++,因此它似乎是有意义的.但是,它们之间存在一些差异,这些差异基本上是并行的,需要硬件才能进
你有什么经历,无论好坏?您可以在此特定应用程序上建议的任何链接?
编辑/澄清:2009年10月28日:我特别询问TDD.我熟悉测试台,包括自检台.我也知道SystemVerilog具有测试平台的一些特殊功能.
10/28/09:隐含的问题包括:1)为任何功能编写测试,从不使用波形进行模拟,2)首先编写测试/测试平台.
11/29/09:在实证研究中显示测试驱动开发提高了他们为(软件)TDD报告的质量 "四种产品的预发布缺陷密度,以每千行代码的缺陷来衡量,在40%到90%之间下降相对于未使用TDD的项目.团队管理层主动报告使用TDD的团队的初始开发时间增加了15-35%,尽管团队同意这可以通过降低维护成本来抵消.减少的错误降低了流片带来的风险,但却以适度的时间表影响为代价. 这也有一些数据.
11/29/09:我主要做控制和数据路径代码,而不是DSP代码.对于DSP,典型的解决方案涉及Matlab位精确仿真.
03/02/10:TDD的优势在于确保测试首先失败.我想这也可以用断言来完成.
最近我正在与一个开发ASIC的硬件设计小组合作.我正在绘制大量用于使用Microsoft Excel的时序图,因为它很容易导入到Word文档中.但是,使用Excel越来越困难.
什么可以用来绘制时序图?那里有简单的工具吗?
有什么区别:
if (dataoutput[7:0] == 8'bx) begin
Run Code Online (Sandbox Code Playgroud)
和
if (dataoutput[7:0] === 8'bx) begin
Run Code Online (Sandbox Code Playgroud)
执行后dataoutput = 52'bx,第二个给出1,但第一个给出0.为什么?(0或1是比较结果.)
使用VHDL或Verilog进行硬件设计更像是现在的编程.但是,我看到SO成员并没有那么积极地谈论VHDL/Verilog编程.
有没有关于使用Verilog/VHDL/SystemVerilog或SystemC处理硬件设计的论坛?
在绘制硬件图时,我对如何解释阻塞和非阻塞分配感到有些困惑.我们是否必须推断非阻塞分配给我们一个寄存器?然后根据这个陈述c <= a+b ,c将是一个注册权,但不是a和b?
module add (input logic clock,
output logic[7:0] f);
logic[7:0] a, b, c;
always_ff @(posedge clock)
begin
a = b + c;
b = c + a;
c <= a + b;
end
assign f = c;
endmodule
Run Code Online (Sandbox Code Playgroud)