小编mcl*_*fix的帖子

如何在Verilog的组合模块中为输出分配"不关心"值

想象一下,我们想要描述一个满足以下真值表的组合电路:

a b | s0 s1 s2 s3
-----------------
0 0 |  1  d  d  d
0 1 |  0  1  d  d
1 0 |  0  0  1  d
1 1 |  0  0  0  1
Run Code Online (Sandbox Code Playgroud)

(其中,d代表"不关心"值,也就是说,我们不关心此输出的值是0还是1)

如果我们通过传统设计,我们可以利用这些"不关心"并为它们分配最方便的值,因此得到的方程(因此,电路)是最简单的.例如,我们可以将之前的真值表更改为:

a b | s0 s1 s2 s3
-----------------
0 0 |  1  1  1  1
0 1 |  0  1  0  1
1 0 |  0  0  1  1
1 1 |  0  0  0  1
Run Code Online (Sandbox Code Playgroud)

最终的方程是(使用Verilog表示法):

s0 = …
Run Code Online (Sandbox Code Playgroud)

verilog

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

如何在组合 always 块中为输出分配默认值,以便即使使用不完整的 if-else 语句也不会推断出锁存器

假设我想编写一个使用 4 个输入和 3 个输出的组合模块。为了模拟我的逻辑,我做这样的事情:

module ifelse (
      input wire a,
      input wire b,
      input wire c,
      input wire d,
      output reg y1,
      output reg y2,
      output reg y3
      );

     always @* begin

       if (a==1'b1 && b==1'b0) begin
         y1 = 1'b0;
         y3 = 1'b1;
         end
       else if (a==1'b0 && c==1'b1 && d==1'b0) begin
         y2 = 1'b1;
         y1 = 1'b1;
         end
       else if (a==1'b0 && c==1'b0) begin
         y3 = 1'b0;
         y2 = 1'b0;
       end
   end
endmodule
Run Code Online (Sandbox Code Playgroud)

好的,我知道这段代码会推断y1,y2和 …

verilog

3
推荐指数
1
解决办法
7402
查看次数

快捷方式评估而不是if(条件)表达;

最近,我遇到了一段这样的代码(不是真正的代码,而是一个基于它的简短示例):

#include <stdio.h>

int main()
{
  int n;

  printf ("n? ");  
  scanf ("%d", &n);

  n%2 && printf ("N is odd\n");  /* <-- this is it */

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

如果有人没有得到它,这段代码相当于:

int main()
{
  int n;

  printf ("n? ");  
  scanf ("%d", &n);

  if (n%2) 
    printf ("N is odd\n");

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

对于x86-64位,使用GCC 4.4.5-8编译的此代码的反汇编为此部分提供了n评估并printf()有条件地调用的部分:

        andl    $1, %eax
        testb   %al, %al
        je      .L3
        movl    $.LC2, %eax
        movq    %rax, %rdi
        movl    $0, %eax
        call    printf
        testl   %eax, %eax
.L3:
        movl …
Run Code Online (Sandbox Code Playgroud)

c lazy-evaluation short-circuiting

0
推荐指数
1
解决办法
201
查看次数

第一次使用Malloc,程序崩溃

该计划旨在接收'n'个学生及其名字并对其进行排序(没有进入排序部分).我无法弄清楚为什么我的程序在测试时崩溃了.这是代码:

#include<stdio.h>
#include <stdlib.h>
#define MaxNameLen 100
int main() {

    int n;
    scanf("%d", &n);
    char *names;
    char **pointerToNames = (char **) malloc(n * sizeof(char));
    if (pointerToNames == NULL)
        return 0;

    int i;

    for (i = 0; i <= n; i++) {
        names = (char *) malloc(MaxNameLen);
        gets(names);
        pointerToNames[i] = names;
    }

    for (i = 0; i < n; i++) {
        free(pointerToNames[i]);
        free(names);
    }
}
Run Code Online (Sandbox Code Playgroud)

c malloc

0
推荐指数
1
解决办法
71
查看次数

标签 统计

c ×2

verilog ×2

lazy-evaluation ×1

malloc ×1

short-circuiting ×1