Turn on suggestions

Auto-suggest helps you quickly narrow down your search results by suggesting possible matches as you type.

Showing results for

- Intel Community
- FPGAs and Programmable Solutions
- Intel® FPGA University Program
- Verilog code for a clock

- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Mute
- Printer Friendly Page

Altera_Forum

Honored Contributor I

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

11-13-2011
09:41 PM

3,131 Views

Verilog code for a clock

I'm new to writing code. I'm currently working on code for a clock... a pretty standard homework application for students I know. I've been trying to teach myself verilog for sometime now, and I could some guidance.

Here's part of my code for the hour part of the clock. It takes clock input that's already down to the proper timing. I'm trying to get the code to count up to 12 then reset down to 0. The outputs A and B go to a 7 segment driver, and I'm using C to count to 12 and reset. But there's obviously something wrong or I wouldn't be asking. Thanks in advance. -Drew module decimal_counter_20(A,B,CLK,RST); input CLK, RST; output [3:0] A; output [3:0] B; reg [3:0] A; reg [3:0] B; reg [4:0] C; always @ (posedge CLK or negedge RST) if (~RST)begin A <= 4'b0000; B <= 4'b0000; C <= 5'b00000; end else if (B < 9)begin B = B + 4'b0001; C = C + 5'b00001; end else if (B == 9)begin A = A + 4'b0001; B <= 4'b0000; end else if (C > 12)begin A <= 4'b0000; B <= 4'b0000; C <= 5'b00000; end endmoduleLink Copied

2 Replies

Altera_Forum

Honored Contributor I

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

11-14-2011
02:06 AM

141 Views

Have you simulated your design? If you have, you would easily see the problem.

I can't match your code with what you describe. As I understand, CLK is the hour clock, and you want to use this clock to count from 0 to 12 in a BCD sequence and display the result on two 7-segment LEDs as the hour, right? I would do it as the following: module decimal_counter_20(A,B,CLK,RST); input CLK, RST; output [3:0] A; // suppose A is the higher digit of hour counter output [3:0] B; // suppose B is the lower digit of hour counter reg [4:0] C; // hour counter from 0 ("00000")to 12 ("10010") in BCD sequence always @ (posedge CLK or negedge RST) if (~RST) C <= 5'b00000; else if (C == 5'b10010)// count to 12, reset to 0 C <= 5'b00000; else if(C[3:0] == 4'b1001) //when lower digit reaches 9 begin C[3:0] <= 4'b0000; //lower digit resets to 0 C[4] <= 1'b1; //higher digit becomes 1 end else C[3:0] <= C[3:0] + 4'b1; // increase by 1 //assign the lower digit of counter to B assign B = C[3:0]; //A can only be either 0 or 1, so A[3:1] are always 0 assign A[0] = C[4]; assign A[3:1] = 3'b000; endmodule
Altera_Forum

Honored Contributor I

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

11-14-2011
04:23 PM

141 Views

Genius...

So you use C as the count... than assign A and B as outputs to the count. That makes much more sense. Its a slow learning process. Thanks for the help. -DTopic Options

- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page

For more complete information about compiler optimizations, see our Optimization Notice.