archive:nmk206
Differences
This shows you the differences between two versions of the page.
| archive:nmk206 [2025/06/18 08:19] – [Lab Code (202425s2) Archive] azman | archive:nmk206 [Unknown date] (current) – removed - external edit (Unknown date) 127.0.0.1 | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ====== NMK206 - Computer Architecture ====== | ||
| - | |||
| - | This course is //Computer Architecture//, | ||
| - | |||
| - | Download [[https:// | ||
| - | |||
| - | **Video Guide(s)** | ||
| - | |||
| - | [[https:// | ||
| - | |||
| - | | < | ||
| - | ModelSim: Installation | ||
| - | |||
| - | // | ||
| - | |||
| - | // | ||
| - | |||
| - | </ | ||
| - | | < | ||
| - | ModelSim: Create Project | ||
| - | |||
| - | // | ||
| - | |||
| - | // | ||
| - | |||
| - | </ | ||
| - | | < | ||
| - | ModelSim: Simulate Logic Cicuit | ||
| - | |||
| - | // | ||
| - | |||
| - | // | ||
| - | |||
| - | </ | ||
| - | |||
| - | ===== Announcements ===== | ||
| - | |||
| - | [20250323] Welcome to NMK206 info page (for 007 lab sessions only)! | ||
| - | |||
| - | [20250424] Soft reminder: Lab Assessment 1 @202500420-0800! | ||
| - | |||
| - | ===== Lab Session ===== | ||
| - | |||
| - | I am using [[https:// | ||
| - | |||
| - | * Lab Briefing {{ : | ||
| - | * Intro to CAD Tools and HDL {{ : | ||
| - | * Verilog Basics {{ : | ||
| - | * [Extra] {{ : | ||
| - | * Combinational Logic {{ : | ||
| - | * Sequential Logic {{ : | ||
| - | * State Machine {{ : | ||
| - | * Simple Digital System {{ : | ||
| - | |||
| - | ==== Verilog Coding Rule ==== | ||
| - | |||
| - | This is the coding rule that I impose on my students. You will be penalized during assessments if it is not adhered to. | ||
| - | |||
| - | - One file for one module | ||
| - | * **RULE**: 1 file 1 module | ||
| - | - **File name must be the same as module name** | ||
| - | * **RULE**: file name === module name (.v) | ||
| - | - All circuit (module) must have a testbench (tb) | ||
| - | * tb is a also module (so, separate file) | ||
| - | * **RULE**: All module MUST have a testbench | ||
| - | * **RULE**: Tb name === module name + _tb | ||
| - | - Use Verilog95 module declaration | ||
| - | * Port list contain names only (separate input/ | ||
| - | * Port connection(s) MUST BE specified using ordered list | ||
| - | * **RULE**: Port connection(s) by ordered list ONLY! | ||
| - | - Modules for combinational logic should only use wire/assign statements | ||
| - | * reg/always reserved for sequential logic and testbench modules | ||
| - | * **RULE**: comb. logic use assign/wire only! | ||
| - | - Only basic logic gates are allowed | ||
| - | * Can only use AND/OR/INV in your logic implementation | ||
| - | * XOR logic is allowed for **lab project only** | ||
| - | * **RULE**: allowed operators AND, OR, INV | ||
| - | - Assign statements can only have ONE binary operator | ||
| - | * Multiple bitwise inverts (~) are ok (they are unary operators) | ||
| - | * **RULE**: 2-input logic gates ONLY | ||
| - | - ALL nets (wire/reg) MUST BE declared. | ||
| - | * some compiler may allow using without declaration | ||
| - | * for my assessments, | ||
| - | * **RULE**: All signals @wire must be declared! | ||
| - | |||
| - | ==== Lab Code (202425s2) Archive ==== | ||
| - | |||
| - | Complete template for a simple 4-bit processor core (as discussed during class) available {{ : | ||
| - | |||
| - | <file verilog alu_flag_4b.v> | ||
| - | module alu_4b (iS, | ||
| - | input[1:0] iS; | ||
| - | input[3:0] iP,iQ,iF; | ||
| - | output[3:0] oF,oY; | ||
| - | wire[3:0] oY; | ||
| - | wire iC, iB, oC,oB; | ||
| - | |||
| - | wire[3:0] tA0, tA1; | ||
| - | wire[3:0] tL0, tL1; | ||
| - | |||
| - | add_4b a_add (iC, | ||
| - | sub_4b a_sub (iB, | ||
| - | and_4b l_and (iP, | ||
| - | or_4b l_or (iP, | ||
| - | |||
| - | // separate flag bits for borrow and carry | ||
| - | assign oF = { 2'b00 , oB, oC }; | ||
| - | // should get from same bit position | ||
| - | assign iB = iF[1]; | ||
| - | assign iC = iF[0]; | ||
| - | |||
| - | dmux41 sel0 (iS, | ||
| - | |||
| - | endmodule | ||
| - | </ | ||
| - | |||
| - | <file verilog alu_flag_4b_tb.v> | ||
| - | module alu_4b_tb (); | ||
| - | reg[1:0] dS; | ||
| - | reg[3:0] dP,dQ,dF; | ||
| - | wire[3:0] mF,mY; | ||
| - | reg[3:0] cF,cY; | ||
| - | |||
| - | integer loop, ecnt; | ||
| - | |||
| - | initial begin | ||
| - | ecnt = 0; | ||
| - | // TASK: try to put dS assignment in a loop! => shorter code! | ||
| - | dS = 2'b00; // test add | ||
| - | for (loop=0; | ||
| - | {dF[0], | ||
| - | #5; | ||
| - | { cF[0],cY } = dF[0] + dP + dQ; | ||
| - | if (cY!=mY||cF[0]!==mF[0]) begin | ||
| - | ecnt = ecnt + 1; | ||
| - | $display(" | ||
| - | mF[0], | ||
| - | end | ||
| - | end | ||
| - | dS = 2'b01; // test sub | ||
| - | for (loop=0; | ||
| - | {dF[1], | ||
| - | #5; | ||
| - | { cF[1],cY } = dP - dQ - dF[1]; | ||
| - | if (cY!=mY||cF[1]!==mF[1]) begin | ||
| - | ecnt = ecnt + 1; | ||
| - | $display(" | ||
| - | mF[1], | ||
| - | end | ||
| - | end | ||
| - | dS = 2'b10; // test and | ||
| - | for (loop=0; | ||
| - | {dP,dQ} = loop; | ||
| - | #5; | ||
| - | cY = dP & dQ; | ||
| - | if (cY!=mY) begin | ||
| - | ecnt = ecnt + 1; | ||
| - | $display(" | ||
| - | end | ||
| - | end | ||
| - | dS = 2'b11; // test or | ||
| - | for (loop=0; | ||
| - | {dP,dQ} = loop; | ||
| - | #5; | ||
| - | cY = dP | dQ; | ||
| - | if (cY!=mY) begin | ||
| - | ecnt = ecnt + 1; | ||
| - | $display(" | ||
| - | end | ||
| - | end | ||
| - | if (ecnt==0) begin | ||
| - | $display(" | ||
| - | end | ||
| - | else begin | ||
| - | $display(" | ||
| - | end | ||
| - | end | ||
| - | |||
| - | alu_4b dut (dS, | ||
| - | |||
| - | endmodule | ||
| - | </ | ||
| - | |||
| - | ==== Lab Project (202425s2) Requirements ==== | ||
| - | |||
| - | This is also shared in Google Doc format (link available in Google Classroom). | ||
| - | |||
| - | <file text nmk206-202425s2_labproject.txt> | ||
| - | ----------- | ||
| - | LAB PROJECT | ||
| - | ----------- | ||
| - | |||
| - | You are required to implement a soft-processor core (HDL-based) with the | ||
| - | following minimum requirements: | ||
| - | - 8-bit microprocessor (instruction size, register size, etc.) | ||
| - | - 8 general purpose registers | ||
| - | - 8 ALU functions | ||
| - | - basic instruction set | ||
| - | = move data between registers | ||
| - | = perform basic ALU operations | ||
| - | = load register with immediate value | ||
| - | |||
| - | These requirements are necessary for submission and minimum grade B. | ||
| - | More functionality means better grades: | ||
| - | - 16-bit/ | ||
| - | - carry circuit for adder (>8b) | ||
| - | - integer multiply/ | ||
| - | - bit-level manipulation (towards microcontroller) | ||
| - | - instruction fetch unit and memory interface | ||
| - | |||
| - | Note#1: Auto-0 for downloaded codes! | ||
| - | |||
| - | Note#2: This is a group assignment, but marks will be evaluated individually. | ||
| - | |||
| - | Assessment deliverables: | ||
| - | |||
| - | 1) Verilog source files in a single ZIP file | ||
| - | - make sure only Verilog files are included in the file | ||
| - | - make sure all modules have each a proper testbench | ||
| - | - must be self-checking testbenches | ||
| - | |||
| - | 2) Technical Document (Specifications) | ||
| - | - not more than 10 pages, no cover page (only list of members' | ||
| - | - content: | ||
| - | = short summary of features | ||
| - | = block diagram of design | ||
| - | = list of instructions (description and op-code) | ||
| - | |||
| - | 3) An online demonstration / Q&A | ||
| - | - not more than 20 minutes | ||
| - | - content: | ||
| - | = short summary of what has been implemented | ||
| - | = if completed, demonstrate running the top-level testbench | ||
| - | = if NOT completed, demonstrate running component-level testbenches | ||
| - | |||
| - | PROJECT DUE: Lab Session@W14/ | ||
| - | |||
| - | Extra Info: | ||
| - | - each student may email in a contribution percentage information: | ||
| - | = list all group members (specify project contribution percentage of each) | ||
| - | = percentage values should total up to 100% (may use fraction e.g. 1/3) | ||
| - | Note: this is optional, | ||
| - | the others in group to do the same | ||
| - | </ | ||
archive/nmk206.1750205983.txt.gz · Last modified: by azman
