【问题标题】:Difference between behavioral and dataflow in verilogVerilog中行为和数据流之间的区别
【发布时间】:2015-02-26 20:20:09
【问题描述】:

我已经搜索了解verilog 中的行为代码和数据流代码之间的区别。最后我找不到很好的例子,到处都告诉他们他们所做的事情。 例如:

“非常简单。名称本身就说明了它们是什么。数据流是描述程序的一种方式。就像描述特定设计的逻辑功能一样。 另一方面,行为模型描述了系统的行为。当给定特定输入时,它的行为如何?"

here 写得很简单,但我需要更多的例子。

【问题讨论】:

  • “数据流建模”更常用的术语是“RTL”。无论如何,谷歌“RTL vs 行为”对你的帮助比你在这里得到的更多。

标签: verilog


【解决方案1】:

Verilog 中的数据流建模允许根据其功能设计数字系统。数据流建模利用布尔方程,并使用许多可以操作输入的运算符来生成输出运算符,例如 + - && & ! ~ || | > {} 所以如果我想在数据流建模中描述一个 2 到 4 的解码器,我会是这样的

module decoder2to4 ( e , a, b, do, dl, d2, d3);
input e, a, b;
output do, dl, d2, d3;
assign dO = ( e & ~a & ~b); //00
assign dl = (e & ~a & b);   //01
assign d2 = (e & a & ~b);   //10
assign d3 = ( e & a & b);   //11
endmodu1e

另一方面,Verilog 中的行为建模用于以算法方式描述设计的功能 所以如果我想在数据流建模中描述一个 2 到 4 的解码器,我会是这样的

module decoder2to4 (e, i, d);
output [3:0] d;
input [l:0]i;
input e;
reg [3:0] d;
    always @ (i or e) begin
            if (e==l) begin
                case (i)
                       0: d = 4'b 0001;
                       1: d = 4'b 0010;
                       2: d = 4'b 0100;
                       3: d = 4'b 1000;
                      default d = 4'b xxxx;
               endcase
            end
            else
               d = 4'b0000;
    end
endmodule

【讨论】:

  • 那么如果我们想在行为建模中写一些 1000 位的东西,我们应该怎么做呢? 1000箱? @ahmed 萨拉赫
  • 行为建模不是关于使用案例块,而是关于描述系统的行为而不考虑合成时形成的实际电路
  • 好的,在您的示例中,您想描述具有不同输入的电路的行为,以便您使用案例。在您的示例中,如果它是解码器 16 到 2^16,您将如何编写代码? @ahmedsalah
  • 我可以写 2^16 行来描述这种行为,但这会花费很多时间,而不是我会声明一个二维数组,它使用函数 $readmemb 和输入从文本文件中获取它的值将是数组的地址,输出将是这样的 d=array[I] 文本文件可以用任何软件语言编写,如 matlab、python 或 perl
猜你喜欢
  • 1970-01-01
  • 2015-02-10
  • 2015-10-24
  • 1970-01-01
  • 2021-12-21
  • 1970-01-01
  • 2019-05-15
  • 1970-01-01
  • 2015-11-18
相关资源
最近更新 更多