2011-02-27 220 views
2

我明白模块基本上就像C++函数。但是,我没有找到像调用这些函数的main()部分。没有main()部分,它如何工作?Verilog没有main()这样的东西?

+1

没有“开始”;这一切都发生在一次。 – 2011-02-27 04:29:32

+0

Verilog的目标是什么?合成编码与测试平台编码不同。 – 2011-02-27 21:20:29

+0

与main()最接近的是最外层的顶层模块,并且它可以被命名为任何你喜欢的不限于Start或main()或条目或类似的东西。在该模块中,您将看到引用的其他模块,类似于从main()调用其他函数。 – 2011-03-01 19:58:50

回答

7

试图找到(或概念力)一个main(),相当于在HDL是错误的方式去学习HDL - 它会阻止你进步。对于可合成的描述,你需要从连续思考(一条指令依次运行)到“并行”思考(所有内容正在运行全部时间)。在精神上,从左到右看你的代码,而不是从上到下,你可能会意识到main()的概念并不是那么有意义。在HDL中,我们不“调用”函数,我们实例化模块并将它们的端口连接到网络;再一次,你需要改变你对过程的心理看法。

一旦你得到它,它会变得更光滑...

2

请记住,Verilog的正常使用是建模/描述电路。当你通电时,所有的电路开始运行,所以你需要编写你的复位逻辑来让每个电路进入稳定的可用操作状态。通常情况下,您将包含重置行并针对此进行初始化。

2

的Verilog有initial块是有点像main()在C.这些是计划从时间0运行的Verilog可以有多个initial块,虽然语句,即并发执行的列表。

always块也将作为main()如果他们已经空敏感列表:

always begin // no sensitivity list 
    s = 4; 
    #10;  // delay statements, or sim will infinite loop 
    s = 8; 
    #10; 
end 
+0

如果你没有在这些块内部实例化一个模块会怎么样。它仍然运行? – 2011-02-27 08:23:03

+1

他们这样做,如果他们的输入是敏感的任何值被扭曲。 – Marty 2011-02-27 09:00:25

相关问题