SparkRoad测评(6)-简易红绿灯与多文件项目
<p>下面是我通过两个文件来组成的层次化的项目工程。</p><p>文件一是最顶层文件。counter.v</p>
<pre>
<code>module counter(clk,led,led1,led2,led3);
input clk;
output led;
output reg led1,led2,led3;
wire clko;
wire rest_n;
regcount;
assign rest_n = 1'b1;
assign led = clko;
clks clk_m(
.refclk(clk),
.rst_n(rest_n),
.clk_out(clko)
);
always @(posedge clko or negedge rest_n)
if(!rest_n)begin
count <= 0;
led1 <= 1'b0;
led2 <= 1'b0;
led3 <= 1'b0;
end else begin
case(count)
0,1,2,3:begin
count <= count + 1'b1;
led1 <= 1'b0;
led2 <= 1'b1;
led3 <= 1'b1;
end
4,5,6,7:begin
count <= count + 1'b1;
led1 <= 1'b1;
led2 <= 1'b0;
led3 <= 1'b1;
end
8,9,10,11,12,13,14:begin
count <= count + 1'b1;
led1 <= 1'b1;
led2 <= 1'b1;
led3 <= 1'b0;
end
15:begin
count <= 0;
led1 <= 1'b1;
led2 <= 1'b1;
led3 <= 1'b0;
end
endcase
end
endmodule
</code></pre>
<p>我在顶层文件中引用了一个秒脉冲定时器的模块clks,clks有三个接口信号:refclk、rest_n、clk_out,主程序的逻辑电路是:黄灯4秒、绿灯4秒、红灯8秒。</p>
<pre>
<code>module clks(refclk,rst_n,clk_out);
input refclk,rst_n;
output reg clk_out;
reg counter;
always @(posedge refclk or negedge rst_n)
if(!rst_n)begin
clk_out <= 1'b0;
counter <= 24'd0;
end else if( counter == (12000000-1))begin
counter <= 0;
clk_out <= !clk_out;
end else begin
counter <= counter + 1'b1;
end
endmodule
</code></pre>
<p>这是clk_m.v模块文件。整个项目的层次是这样的。</p>
<p> </p>
<p>程序烧录到板子后可以看到:各灯安装秒数进行运行了。</p>
<p> </p>
<p>支持一个,verilog我都已经看不太懂了</p>
freebsder 发表于 2022-4-21 22:34
支持一个,verilog我都已经看不太懂了
<p>莫非兄弟用的是Chisel或者system c吗?</p>
bigbat 发表于 2022-4-22 08:44
莫非兄弟用的是Chisel或者system c吗?
<p>很久前用过一段时间verilog,十多年了吧。忘完了都。</p>
很少看到用这么好的LED,有颗欧司朗的
页:
[1]