2015-05-24 129 views
1

我正在按照教程闪烁我的fpga领导。 这些是呈现的代码:)这些verilog代码有什么区别?

module LED ( 
    input  [17:0] SW, 
    output reg [17:0] LEDR 
);  
    assign led = switch; 
endmodule 

2)--------

module LED ( 
    input [17:0] SW, 
    output reg [17:0] LEDR 
); 
    always @(*) 
     led = switch; 
endmodule 

3)---------

module LED (  
    input CLOCK_50, 
    input [17:0] SW, 
    output reg [17:0] LEDR 
); 

    always @(posedge CLOCK_50) 
     LEDR = SW; 
endmodule 
+1

问题是什么?另外,请格式化代码。 – sfjac

回答

1

第一个示例使用连续赋值将led的值设置为值开关。这就像直接用导线连接led开关。每当开关变化,导致也改变。

你的第二个例子做同样的事情,但使用总是块。 总是块有一个灵敏度列表,其中包含将触发块运行的信号。在这种情况下,它是*,这意味着它会随时触发块中的任何信号发生变化。我相信这和你的第一个例子是一样的。

第三个示例使用时序逻辑来设置LEDRSW。在这种情况下,只有当CLOCK_50信号从非高状态变为高电平时,触发才会触发。如果CLOCK_50永不上升,LEDR永远不会设置为任何值。

顺便说一句,我不认为你的第一个或第二个例子是可综合的。我认为LED开关应该是LEDRSW

这些文章给出的概念更好地描述你的例子:

分配:http://verilog.renerta.com/mobile/source/vrg00005.htm

always块:http://www.asic-world.com/verilog/verilog_one_day3.html

+0

谢谢!你是正确的,LED和开关应该是左和SW。所有这些代码都做同样的事情?但推荐的方式是什么?第三? – Bruno

+0

LED应该是LEDR **** – Bruno

+0

@布鲁诺我不认为有一种“推荐”的方式;这取决于你的目标是什么。您将不得不研究组合逻辑和时序逻辑,以便查看哪一个更适合您的需求。如果你只是想设置LED,一个分配是好的。 – jwp36