标签: hdl

硬件描述语言的最佳实践是什么(Verilog,VHDL等)

在实施HDL代码时应该遵循哪些最佳实践?

与更常见的软件开发领域相比,有哪些共性和差异?

verilog vhdl hdl

69
推荐指数
6
解决办法
2万
查看次数

Verilog中==和===有什么区别?

有什么区别:

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是比较结果.)

verilog hdl

29
推荐指数
3
解决办法
7万
查看次数

verilog模块中reg和wire之间的区别是什么

reg和wire之间有什么区别?我们什么时候应该使用reg以及何时应该在verilog模块中使用wire.我有时也注意到输出再次被声明为reg.例如,在D触发器中的reg Q. 我已经在某处读过 - "程序赋值语句的目标输出必须是reg数据类型." 什么是程序转让声明?我已经彻底搜索了这个,但未能找到明确的解释.

verilog hdl

19
推荐指数
3
解决办法
6万
查看次数

如何在"Nand to Tetris"课程中为ALU设置输出标志?

虽然我标记了这个作业,但它实际上是我自己做的一个免费课程.无论如何,该课程被称为"从Nand到俄罗斯方块",我希望有人在这里看过或参加过课程,这样我就可以得到一些帮助.我正处于使用提供的hdl语言构建ALU的阶段.我的问题是我无法正确编译芯片.当我尝试为ALU设置输出标志时,我收到错误.我认为问题是我不能下标任何中间变量,因为当我只是尝试根据一些随机变量(比如一个输入标志)将标志设置为true或false时,我没有得到错误.我知道问题不在于我尝试使用的芯片,因为我使用的是所有内置芯片.

到目前为止,这是我的ALU芯片:

/**
 * The ALU.  Computes a pre-defined set of functions out = f(x,y)
 * where x and y are two 16-bit inputs. The function f is selected 
 * by a set of 6 control bits denoted zx, nx, zy, ny, f, no.
 * The ALU operation can be described using the following pseudocode:
 *     if zx=1 set x = 0       // 16-bit zero constant
 *     if nx=1 set x = !x      // Bit-wise negation
 *     if zy=1 set …
Run Code Online (Sandbox Code Playgroud)

hdl alu nand2tetris

17
推荐指数
3
解决办法
9245
查看次数

verilog模块的条件实例化

是否可以在verliog中有条件地实例化模块?

例如:

if (en==1)  
  then module1 instantiation  
else  
  module2 instantiation  
Run Code Online (Sandbox Code Playgroud)

conditional verilog instantiation hdl

12
推荐指数
3
解决办法
4万
查看次数

在Verilog生成语句中增加多个Genvars

我正在尝试用verilog创建一个多级比较器,我无法弄清楚如何在单个生成循环中增加多个genvars.我正在尝试以下方法:

genvar i,j;
//Level 1
generate
  j=0;
  for (i=0;i<128;i=i+1)
  begin: level1Comp
    assign ci1[i] = minw(tc[j],tc[j+1]);
    j = j+2;
  end
endgenerate
Run Code Online (Sandbox Code Playgroud)

并收到以下错误:

Error-[SE] Syntax error
  Following verilog source has syntax error :
  "encoder.v", 322: token is '='
    j=0;
Run Code Online (Sandbox Code Playgroud)

任何人都知道如何在同一个生成语句中增加多个genvars?或者至少获得相同的功能?

hardware verilog syntax-error hdl system-verilog

10
推荐指数
2
解决办法
1万
查看次数

如何修复这种非递归奇偶合并排序算法?

我正在寻找非递归奇偶合并排序算法,并找到了两个来源:

两种算法都相同但是错误.生成的排序网络不是奇偶合并排序网络.

以下是具有32个输入的结果网络的图像.2条水平线之间的垂直线表示将值a [x]与[y]进行比较,如果大于,则交换数组中的值.

32个输入的奇偶合并排序http://flylib.com/books/3/55/1/html/2/images/11fig07.gif(可点击)

我将代码从Java复制到C并用excha 替换了函数printf来打印交换候选者.

当绘制对的图时,可以看出生成了太多对.

有谁知道如何修复此算法?

为什么我需要非递归版本?
我想将这个排序网络转换为硬件.将流水线阶段插入非递归算法很容易.

我还调查了递归版本,但是将算法转换为流水线硬件太复杂了.

我的C代码:

#include <stdlib.h>
#include <stdio.h>

void sort(int l, int r)
{ int n = r-l+1;

  for (int p=1; p<n; p+=p)
    for (int k=p; k>0; k/=2)
      for (int j=k%p; j+k<n; j+=(k+k))
        for (int i=0; i<n-j-k; i++)
          if ((j+i)/(p+p) == (j+i+k)/(p+p))
              printf("%2i cmp %2i\n", l+j+i, l+j+i+k);
}
int main(char* argv, int args)
{ const int COUNT = 8; …
Run Code Online (Sandbox Code Playgroud)

c sorting mergesort hdl sorting-network

10
推荐指数
1
解决办法
1337
查看次数

如何在verilog中使用const

而不是使用

module ... ( .. )  ;

     #15 
endmodule
Run Code Online (Sandbox Code Playgroud)

我想用

module ... ( ... ) ;
 // GateDelay is a const, like in c language const int GateDelay = 15 ;
 # GateDelay     

endmodule
Run Code Online (Sandbox Code Playgroud)

或者同样的事情

module ... ( ... ) ;
 // assume Wordsize is defined at " define Wordsize 15 "
 reg [ Wordsize -1 : 0 ] mem ;

endmodule
Run Code Online (Sandbox Code Playgroud)

我能用verilog做那个愿望吗?

verilog const hdl system-verilog

8
推荐指数
2
解决办法
3万
查看次数

我的DMux 4方式出了什么问题?

它似乎接近工作,显然只是在第7行搞砸了?

/**
 * 4-way demultiplexor.
 * {a,b,c,d} = {in,0,0,0} if sel==00
 *             {0,in,0,0} if sel==01
 *             {0,0,in,0} if sel==10
 *             {0,0,0,in} if sel==11
 */


CHIP DMux4Way {
    IN in, sel[2];
    OUT a, b, c, d;

    PARTS:
    DMux(in = in, sel = sel[0], a = out1, b = out2);

    DMux(in = out1, sel = sel[1], a = a, b = b);
    DMux(in = out2, sel = sel[1], a = c, b = d);
}
Run Code Online (Sandbox Code Playgroud)

我已经实现了我的DMux,如下所示,我只是使用它,就好像它是一棵树:

/**
 * Dmultiplexor.
 * {a,b} = …
Run Code Online (Sandbox Code Playgroud)

hdl mux nand2tetris

8
推荐指数
1
解决办法
3181
查看次数

目的是提供多个架构?

我正在学习VHDL,我正在尝试从示例,语法指南和实验中学习.

有一点我不太明白为什么你想要提供多个架构.例如,这个示例MUX代码:

architecture behv1 of Mux is
begin
    process(I3,I2,I1,I0,S)
    begin

        -- use case statement
        case S is
        when "00" =>    O <= I0;
        when "01" =>    O <= I1;
        when "10" =>    O <= I2;
        when "11" =>    O <= I3;
        when others =>  O <= "ZZZ";
    end case;

    end process;
end behv1;

architecture behv2 of Mux is
begin

    -- use when.. else statement
    O <=    I0 when S="00" else
        I1 when S="01" else
        I2 when S="10" else …
Run Code Online (Sandbox Code Playgroud)

hardware syntax vhdl hdl

7
推荐指数
1
解决办法
167
查看次数