Continue to Site

Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

[VERILOG] How to generate FIFO WRITE SIGNAL in COUNTER MODULE ?

Status
Not open for further replies.

AbinayaSivam

Member level 1
Joined
Jul 27, 2017
Messages
38
Helped
0
Reputation
0
Reaction score
0
Trophy points
6
Activity points
345
My normal counter code

Code:
module counter

(
	input clk, enable, rst_n,
	output  reg[31:0] count
);

	always @ (posedge clk or negedge rst_n)
	begin
		if (~rst_n)
			count <= 0;
		else if (enable == 1'b1)
			count <= count + 1;
	end

endmodule

I am trying to implement the above code in Quartus and NIOS.

counter's clock speed is 50MHz, So counter data is missing in NIOS console.

So i need to give control to FIFO (write signal) through VERILOG.

I need to change my counter design to check whether the fifo is full or not and only write the value (and increment the counter) when the fifo is not full. Please suggest me ,
 

How to generate FIFO WRITE SIGNAL in COUNTER MODULE ?

Depends on the design.
The write signal can be always '1', toggling with the clock, toggling at specific intervals, etc. This depends heavily on the nature of the write side of the FIFO.

I need to change my counter design to check whether the fifo is full or not and only write the value (and increment the counter) when the fifo is not full.
If you are using the FIFO IP, then the FIFO full flag is already there to be used.
 

Thanks for your response. I am working with ALTERA quartus software tool.

Simple Counter with FIFO is working. Working Design flow as mentioned (screenshot) as below
Code:
module counter
(
	input clk, enable, rst_n,
	output  reg[31:0] count
);
	always @ (posedge clk or negedge rst_n)
	begin
		if (~rst_n)
			count <= 0;
		else if (enable == 1'b1)
			count <= count + 1;
	end
endmodule

The above design is working (generated only counter data). In the following design, i have done some modification, in verilog code i am generating Trigger and counter data.
Code:
module Counter(
    input clk,
	 input enable,
    input reset,
    output reg[31:0] Final_value,
    output reg trig
    );
    reg[31:0] counter_out;
    reg [7:0] temp;
    reg [31:0] counter_result;
    wire temp1;
    wire temp2; 
       
    always@(posedge clk or negedge reset)
    begin
    if(~reset)
        begin
        trig<=0;
        temp<=0;
        counter_out<=0;
        end
    else if(enable==1'b1)
        begin
        counter_out<=counter_out+1;
        temp<=temp+1;
        if(temp==25)
            begin
            temp<=0;
            trig<=~trig;
            end
        end
        end 
	 assign temp1=trig;
	 assign temp2=temp1&&clk;
	 always@(posedge temp2 or negedge reset)
	 if(~reset)
	    counter_result<=0;   
	  else 
	 begin
        counter_result<=counter_result+1;
     end
  always@(posedge trig or negedge reset)
  if(~reset)
       Final_value<=0;  
   else 
  begin
       Final_value<=counter_result;
  end
endmodule

Can anyone check my design. Whether i doing right or wrong.
 

Attachments

  • block.JPG
    block.JPG
    266.6 KB · Views: 152
  • NIOS_2.JPG
    NIOS_2.JPG
    131.8 KB · Views: 165

Status
Not open for further replies.

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top