Finding the minimum value in Verilog. Given the C code and must turn to Verilog.

Status
Not open for further replies.

Franci25

Newbie level 1
Joined
Dec 10, 2012
Messages
1
Helped
0
Reputation
0
Reaction score
0
Trophy points
1,281
Visit site
Activity points
1,289
So my professor gave me this problem and no background what so ever on this subject. He just talked about it for 5 minutes in class and gave us this huge problem to solve. The one thing he said to do is a state machine. So far this is what i have come up with. So basically I have to use a state machine to turn this C code into verilog. I have to find the minimum value out of 4 values and it continuously does this. So every 4 values it displays the min value on the hex displays of the DE2 board. I am using notepad ++ for now to write my code. Once i have something to start with I will use Quartus to compile and run. Attachment is on the bottom for the problem description.
Code:
moduleExam3(max1,clk,rst,out,warning)
	
input [7:0]max1; //set max repetitions
input clk;
input rst;

output [6:0]out;
wire [6:0]out;
output warning;

	
parameter Start			= 4'd0;
parameter Initialize	        = 4'd1;
parameter CheckFor		= 4'd2;
parameter Sum1			= 4'd3;
parameter Sum1update	        = 4'd4;
parameter minvalue		= 4'd5;
parameter value2		        = 4'd6;
parameter Update		        = 4'd7;
parameter End			= 4'd8;
parameter danger		        = 4'd9;

reg [3:0]S;
reg [3:0]NS;
reg [7:0]sum;
reg [7:0]i;
reg warning;
reg [6:0] count;
reg [6:0]int_out;
	
always @ (posedge max1) begin 
	if(rst==1'bo)
		begin
				S <= Start;
			end
		else 
			begin
				S <= NS;
			end
	end 
	
always @ (posedge clk)
	begin
		case (S)
			Start:
				NS <= initialize;
			initialize:
				NS <= checkFor;
			checkFor:
				begin
					if ( i >= max1)
						NS <= End;
					else
						NS <= Sum1;
				end
			Sum1:
				begin
					if (count == i)
					NS <= minvalue;
					else
					NS <= Sum1update;
				end
			Sum1update:
				NS <= Sum1;
			minvalue:
				NS <= value2;
			value2:
				NS <= update;	
			update:
				NS <= checkFor;
			default:
				NS <= danger;
		endcase
	end 
	
always @ (posedge clk)
	begin
		case (S)
			initialize:
				being 
				sum = 1'b1;
				i = 1'b1;
				value = 2'd2;
				value2 = 1'b101;
				
				end
			Sum1:
				begin
				
	[COLOR="#FF0000"]This is where i am stuck 			
	[/COLOR]
	
//Seven seg display

assign out[0] = int_out[6];
assign out[1] = int_out[5];
assign out[2] = int_out[4];
assign out[3] = int_out[3];
assign out[4] = int_out[2];
assign out[5] = int_out[1];
assign out[6] = int_out[0];

always @(*)
	begin
		if (rst == 1'b0)
			int_out = 1'b0;
		else
			begin
				case (sum)	    // abcdefg
					4'h0: int_out = 7'b0000001;
					4'h1: int_out = 7'b1001111;
					4'h2: int_out = 7'b0010010;
					4'h3: int_out = 7'b0000110;
					4'h4: int_out = 7'b1001100;
					4'h5: int_out = 7'b0100100;
					4'h6: int_out = 7'b0100000;
					4'h7: int_out = 7'b0001111;
					4'h8: int_out = 7'b0000000;
					4'h9: int_out = 7'b0000100;
					4'ha: int_out = 7'b0001000;
					4'hb: int_out = 7'b1100000;
					4'hc: int_out = 7'b0110001;
					4'hd: int_out = 7'b1000010;
					4'he: int_out = 7'b0110000;
					4'hf: int_out = 7'b0111000;
				endcase
			end
	end
endmodule
View attachment ECE 287 Exam 3.pdf
 
Last edited:

Status
Not open for further replies.
Cookies are required to use this site. You must accept them to continue using the site. Learn more…