Com sys lab/testing ALU

จาก Theory Wiki
ไปยังการนำทาง ไปยังการค้นหา
จากวิชา com sys lab

ในส่วนนี้เราจะหัดใช้ latch เพื่อทดสอบ ALU จากนั้นเราจะลองนำ ALU มาต่อกับ register file (มีให้) เพื่อทดลองส่งสัญญาณควบคุมการทำงานของระบบ

Latch

สร้าง module latch4 ที่มี port ดังนี้:

  • sc_in<sc_uint<4> > a;
  • sc_out<sc_uint<4> > b;
  • sc_in_clk clk;

โดย latch จะเปลี่ยนค่า output b ให้เท่ากับ input a เมื่อ clk เปลี่ยนค่าจาก 0 -> 1 (positive edge triggered) นอกจากนี้ใน module ให้เพิ่ม method get และ set สำหรับอ่านและเขียนค่า b โดยตรงด้วย (เพื่อเป็นการตั้งค่าเริ่มต้น)

Hint: ในการเลือก positive edge trigger นั้น ตอนใส่ clk ใน sensitive ให้ใส่ clk.pos() แทน

หมายเหตุ: ที่ลงท้ายว่า 4 เพราะจะเป็น latch 4 บิต (ในงานถัด ๆ ไปจะต้องทำ latch 8 บิตด้วย สำหรับ program counter)

จากนั้นให้นำ latch ไปต่อกับ ALU เพื่อทดสอบการทำงาน โดยมีแผนภาพการเชื่อมต่อดังนี้ (ด้านล่างเป็นตัวอย่างการทดสอบ op = 0 (add) )

    +-------+        +-------+
 +->| LATCH |------->|a     c|------+
 |  |       |        |  ALU  |      |
 |  +-------+    1-->|b   op |      |
 |     |             +-------+      |
 |    clk                  |        |
 |                         0        |
 +----------------------------------+

ด้านล่างเป็นตัวอย่าง signal ที่ควรเห็น (y=1 เอาหนึ่งไปบวกตลอด; ผลลัพธ์อยู่ที่ z) ควรเพิ่ม signal ของ zero flag ด้วย

Systemc-alu-latch.png

อ่านเพิ่มเติม:

Register file

เราได้เตรียม module register_file ไว้แล้ว ภายในจะเก็บ register ขนาด 4 บิต จำนวน 8 ตัว (หมายเลข 0 - 7) โดยมี port ดังนี้

        +-------------------+
       -|reg0          data0|-
       -|reg1          data1|-
        |                   |
       -|regw0              |
       -|dataw0             |
       -|write_enabled      |
        |         clk       |
        +-------------------+
                   |
  • reg0 และ reg1 จะระบุหมายเลข register ที่ต้องการอ่าน ค่าของ register จะส่งออกมาที่ data0 และ data 1 ส่วนนี้เป็น level sensitive
  • ในการเขียน จะเป็น positive edge triggered (ด้วย clk) โดยถ้า write_enabled = 1 แล้ว จะเขียนค่า dataw0 ลงไปยัง register หมายเลข regw0 (เขียนเสร็จ ถ้ามีการอ่านค่า register นั้นอยู่ ก็จะมีการอัพเดททันที)