חזור לתיקייה: סדנה

4 - SystemVerilog IV

חיפוש בתיקיה
Ctrl K
לחץ כאן או הקש Ctrl K כדי לחפש בכל התיקיה
  • enum
  • אוטומטים(של חשמל) ב-SystemVrilog
  • אוטומט בסיסי - Template

4 - SystemVerilog IV

00440252

מערכות ספרתיות ומבנה המחשב

רשימות הרצאה לקריאה בשבת

SystemVerilog IV

הופק מתוך תקיית התואר של שקד

uni-folder.vercel.app

enumenumenum

נוכל להגדיר באמצעות enumenumenum סוג משתנה חדש (לא באמת, אוקי, חשמליסטים לא יודעים לתכנת)

typedef enum {name1, name2, name3} set_name;

בעצם אנו נותנים מספר לכל שם שכזה ונוכל להשתמש בשמות האלו כדי שיהיה לנו קל יותר לממש דברים נחמדים.

דוגמה

typedef enum {red, green, blue} color;
color c;

אנו נשתמש ב-enumenumenum בשביל מצבים בחומרה כדוגמת:

typedef enum {idleState, state1, state2} state;

אוטומטים(של חשמל) ב-SystemVrilogSystemVrilogSystemVrilog

נזכר כי יש לנו שני סוגים של מכונת מצבים:

  • מילי - הפלט יכול להשתנות בהתאם למצב הנוכחי ולכניסה.
  • מוור - הפלט יכול להשתנות אך ורק בהתאם למצב הנוכחי.

אנו נעדיף מכונת מוור שכן היא הרבה יותר יציבה.

ב-SystemVerilogSystemVerilogSystemVerilog אנו נממש מכונת מצבים באמצעות בלוקים סינכוניים לשמירת המצב ובלוקים א-סינכרוניים למצבים והפלט.

אוטומט בסיסי - TemplateTemplateTemplate

נבנה זאת למכונת milimilimili:

module my_FSM_module (
	input logic input1.
	...
	output logic outputN
);
	// Declering the FSM states
	typedef enum { idleState, startState } state;
	
	// Declering signals for the next & current state;
	state currentState;
	state nextState;
	
	// FSM synchronous procedural block
	always_ff @(posedge clock, posedge restart) begin
		if (restart == 1'b1) begin
			currentState <= idleState;
		end
		else begin
			currentState <= nextState;
		end
	end
	
	always_comb begin
		nextState = currentState;
		output1 = 1'b0;
		// ...
		outputN = 1'b0;
		
		case (currentState)
			idleState: begin
				nextState = ...;
				output1 = ...;
				// ...
				outputN = ...;
			end
			startState: begin
				nextState = ...;
				output1 = ...;
				// ...
				outputN = ...;
			end
		endcase
	end
endmodule