标签: verilog

在Emacs中以双模式模式更好地缩进

我正在使用Emacs来修改交错Perl和Verilog的代码.我two-mode-mode用来在两者之间切换,按预期工作.问题是perl代码是逐行//;显示的,如下所示:

This is verilog code
// This is a verilog comment
//; This is perl code
//;   This is more perl code
This is verilog code again.
Run Code Online (Sandbox Code Playgroud)

虽然双模式模式识别出它是Perl,但它是逐行进行的,因此缩进等对于线条没有意义.

我想要做的是像往常一样格式化Perl代码,但忽略//;字符(它们应该只留在行的开头,然后像往常一样格式化Perl).有任何简单方法的想法吗?我刚刚开始偷看模式文件,它们是可以理解的复杂,所以任何提示都将不胜感激!

emacs perl verilog code-formatting

15
推荐指数
1
解决办法
381
查看次数

什么是`+:`和` - :`?

我最近在verilog/systemverilog代码中看到了这个运算符.

logic [15:0] down_vect;
logic [0:15] up_vect;

down_vect[lsb_base_expr +: width_expr]
up_vect  [msb_base_expr +: width_expr]
down_vect[msb_base_expr -: width_expr]
up_vect  [lsb_base_expr -: width_expr]
Run Code Online (Sandbox Code Playgroud)

我很少见到这一点,我想问一下这是什么,何时以及如何使用它?

verilog system-verilog

15
推荐指数
1
解决办法
5538
查看次数

使用参数在verilog中创建常量

我想接受一个参数并将一个等于参数的零分配给一个常量,并使用此常量进行比较.我该怎么做 ?

例如,说参数是3,我想创建一个常量

n=3'b000;
Run Code Online (Sandbox Code Playgroud)

并在另一个声明中使用此n.唯一的问题是,我不知道n.我如何初始化'n'零和我分配给它的verilog数据类型?

verilog

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

Verilog如何处理负数?

例如,假设我有一个reg [7:0] myReg 我赋值的值-8'D69

我知道Verilog将它存储为2的补码,所以它应该存储为

10111011
Run Code Online (Sandbox Code Playgroud)

我现在的问题是,如果我要对它进行操作,比如myReg/2

它会评估到-34?或者它需要10111011然后把它变成187然后执行分裂,返回93?

verilog negative-number

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

$ size,$ bits,verilog

verilog中$size$bits运算符有什么区别?如果我有变量[9:0]a,[6:0]b,[31:0]c.

c <= [($size(a)+$size(b)-1]-:$bits(b)];
Run Code Online (Sandbox Code Playgroud)

上面表达式中'c'的输出是什么?

arrays verilog system-verilog

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

如何从预处理器宏创建字符串

我有一个预处理器宏,代表我的设计的分层路径.

例:

`define HPATH top.chip.block
Run Code Online (Sandbox Code Playgroud)

我需要构造一个保存值的字符串`HPATH,所以在我的例子中字符串应该相等top.chip.block.

有没有办法构建这样的字符串?

以下尝试都没有奏效:

string hpath;
hpath = "`HPATH";     // Results in hpath = "`HPATH"
hpath = \"``HPATH\";  // Doesn't compile
hpath = `HPATH;       // Doesn't compile
Run Code Online (Sandbox Code Playgroud)

我希望hpath等同于执行此分配hpath = "top.chip.block",但通过使用`HPATH而不是再次指定路径.

我无法使用,%m因为我需要在我的顶级UVM环境中的字符串,而不是在模块中.

更多背景:我想这样做的原因是因为我在UVM类库中使用后门寄存器访问.后门API需要将hdl_path设置为设计中的块,作为字符串.我已经定义了分层路径,并且在指定hdl_paths时尝试重用它们,所以我没有定义两次相同的路径.我的测试平台将使用分层路径和字符串路径.

macros verilog system-verilog

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

Verilog有什么区别!和〜?

所以它最终导致让我保持数天的错误,是一段应该评估为False评估为True的代码.我的初始代码类似于:

if(~x && ~y) begin
    //do stuff
end
Run Code Online (Sandbox Code Playgroud)

即如果x不是一个而y不是一个那么就做.通过调试器,我意识到即使x为1,if语句中的表达式仍然导致TRUE并且后续代码被执行.

但是,当我将声明更改为:

if(x == 0 && y == 0) begin
//do stuff
end
Run Code Online (Sandbox Code Playgroud)

并尝试过:

if(!x && !y) begin
//do stuff
end 
Run Code Online (Sandbox Code Playgroud)

未评估if语句中的代码,这是预期的行为.我明白〜是一个有点否定的!一个逻辑否定,但不应该(~x &&~y)和(!x &&!y)评估相同的东西?我担心代码库太大了,所以我不能把它粘贴到这里,但这是我为使代码按照我的意图工作而做的唯一改动.谢谢.


作为回应,我在下面的一条评论中创建了一个测试用例来测试这种行为:

`timecale 10ns/1ns

module test_negation();

integer x, y;

initial begin
    x = 1; y = 0;

    if(~x && ~y) begin
        $display("%s", "First case executed");
    end

    if(!x && !y) begin
        $display("%s", "Second case executed");
    end

    if(x == 0 && y == 0) begin
        $display("%s", "Third case executed");
    end
end …
Run Code Online (Sandbox Code Playgroud)

boolean-logic verilog modelsim

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

如何在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万
查看次数

Verilog:如何实例化模块

如果我有一个Verilog模块'top'和一个verilog模块'子组件',我如何在顶部实例化子组件?

最佳:

module top(
   input        clk,
   input        rst_n,
   input        enable,
   input  [9:0] data_rx_1,
   input  [9:0] data_rx_2,
   output [9:0] data_tx_2
);
Run Code Online (Sandbox Code Playgroud)

子:

module subcomponent(
   input        clk,
   input        rst_n,
   input  [9:0] data_rx,
   output [9:0] data_tx
);
Run Code Online (Sandbox Code Playgroud)

注意
这是一个通用的问题,不断出现,它遵循自我答案的格式.鼓励添加答案和更新.

verilog system-verilog

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

verilog模块的条件实例化

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

例如:

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

conditional verilog instantiation hdl

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