Velocity Reviews

Velocity Reviews (http://www.velocityreviews.com/forums/index.php)
-   VHDL (http://www.velocityreviews.com/forums/f18-vhdl.html)
-   -   Verilog Counter Question (http://www.velocityreviews.com/forums/t954399-verilog-counter-question.html)

e.hanrahan27@gmail.com 11-10-2012 06:41 PM

Verilog Counter Question
 
Hi I am very new to digital design and am using Verilog to code some modules.
The following is the module code for a Counter I designed using Verilog.

//
module counter (clk,rst,q);
input clk,rst;
output [2:0] q;
reg [2:0] q;

always @ (posedge clk)
begin
if (rst==0)
q <= 0;
else
q <= q+1;
end
endmodule
//

In the testbench I set (rst = 0) for the first 10ns and then (rst = 1) for the rest. The following is the testbench code.

module countertest;
reg clk, rst;
wire q;

counter c1(clk,rst,q);

//
always
begin
#5 clk = ~clk;
end

initial
begin
clk = 0;
rst = 0;
#10 rst =1;
end
endmodule
//

my question is this - what does the command (q <= q + 1) do in this example. The simulation shows that it will start to cause the q output to cycle between low and high every 10ns. I want to know why this is?

Nicolas Matringe 11-10-2012 10:43 PM

Re: Verilog Counter Question
 
Le 10/11/2012 19:41, e.hanrahan27@gmail.com a écrit :
> Hi I am very new to digital design and am using Verilog to code some modules.
> The following is the module code for a Counter I designed using Verilog.


So why do you ask your question in the VHDL group ? ;o)

Nicolas

Gabor 11-11-2012 12:27 AM

Re: Verilog Counter Question
 
On 11/10/2012 1:41 PM, e.hanrahan27@gmail.com wrote:
> Hi I am very new to digital design and am using Verilog to code some modules.
> The following is the module code for a Counter I designed using Verilog.
>
> //
> module counter (clk,rst,q);
> input clk,rst;
> output [2:0] q;
> reg [2:0] q;
>
> always @ (posedge clk)
> begin
> if (rst==0)
> q <= 0;
> else
> q <= q+1;
> end
> endmodule
> //
>
> In the testbench I set (rst = 0) for the first 10ns and then (rst = 1) for the rest. The following is the testbench code.
>
> module countertest;
> reg clk, rst;
> wire q;
>
> counter c1(clk,rst,q);
>
> //
> always
> begin
> #5 clk = ~clk;
> end
>
> initial
> begin
> clk = 0;
> rst = 0;
> #10 rst =1;
> end
> endmodule
> //
>
> my question is this - what does the command (q <= q + 1) do in this example. The simulation shows that it will start to cause the q output to cycle between low and high every 10ns. I want to know why this is?
>

As pointed out, there is a Verilog newsgroup.

As to your question, q in the counter module is a three bit
vector. q in the test bench is a single wire. In Verilog, it
is not an error (but you should have seen a warning) to connect
a wire to a port that does not match the width of the wire. So
in your case q from the test bench just shows the LSB of the
counter, which would toggle on each rising clock edge.

-- Gabor


All times are GMT. The time now is 11:05 AM.

Powered by vBulletin®. Copyright ©2000 - 2014, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.