我对HDL编码很新。我正在使用Xilinx verilog进行HDL编码。
我正在尝试使用push btn来激活下面的LED闪烁代码,当按钮被释放时,闪烁停止。以下是闪烁的LED代码
`timescale 1ns / 1ps
module blinkyslow(
input CLOCK, SW,
output LED
);
reg [24:0] COUNT = 25'b0000000000000000000000000;
reg LED=1;
always @(posedge CLOCK) begin
COUNT <= COUNT + 1;
LED <= (COUNT == 25'b0000000000000000000000000)?~LED:LED;
end
endmodule
我正在使用basys 3 board,我正在尝试将变量SW链接为开关
答案 0 :(得分:2)
您可以使用此代码:
`timescale 1ns / 1ps
module blinkyslow(
input CLOCK, SW,reset,
output reg LED
);
reg [24:0] COUNT;
always @(posedge CLOCK) begin
if ( reset ==1'b1)
LED <= 1'b0;
COUNT <= 0;
else
begin
COUNT <= COUNT + 1;
LED <= SW & ((COUNT == 25'b0)?~LED:LED);
end
end
endmodule
由于始终模块仅对CLOCK信号的上升沿敏感,因此复位信号为同步复位。
答案 1 :(得分:1)
例如,您可以通过仅在按下按钮时使计数器递增来实现它。
(严格来说,这不是很好,因为如果COUNT
保持为零,LED
将在时钟切换时切换。仅在按下按钮时切换LED
将解决此问题< / p>
`timescale 1ns / 1ps
module blinkyslow(
input CLOCK, SW,
output LED
);
reg [24:0] COUNT = 25'b0000000000000000000000000;
reg LED=1;
always @(posedge CLOCK) begin
if (SW) begin
COUNT <= COUNT + 1;
LED <= (COUNT == 25'b0000000000000000000000000)?~LED:LED;
end
end
endmodule
(未经测试,假设SW = 1
表示按下了电路板上的开关)
答案 2 :(得分:0)
@Nicholas Chan。在原始代码中,您已在初始块中定义了以下行。因此,LED硬连线为零。
timescale 1ns / 1ps
module blinkyslow(
input CLOCK, SW,
output LED
);
initial:begin
reg [24:0] COUNT = 25'b0000000000000000000000000;
reg LED=1;
end
always @(posedge CLOCK) begin
COUNT <= COUNT + 1;
LED <= (COUNT == 25'b0000000000000000000000000)?~LED:LED;
end
endmodule
所以要么为LED和COUNT定义一个复位信号(如前面的答案),或者你可以尝试使用以下代码使用初始块
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;
public class TestStream {
public static void main (String[] args) throws IOException {
FileOutputStream fos = new FileOutputStream("test.txt");
PrintStream p1 = new PrintStream(fos, false);
PrintStream p2 = new PrintStream(fos, false);
p1.print("Test");
p1.flush();
p2.print(100);
p2.flush();
fos.close();
}
}