ผลต่างระหว่างรุ่นของ "Com sys lab/mockup controls"

จาก Theory Wiki
ไปยังการนำทาง ไปยังการค้นหา
(หน้าที่ถูกสร้างด้วย ': จาก com sys lab ในส่วนนี้เราจะทดลองเขียนส่วน control unit โด...')
 
 
(ไม่แสดง 2 รุ่นระหว่างกลางโดยผู้ใช้คนเดียวกัน)
แถว 15: แถว 15:
 
  add $0,$3
 
  add $0,$3
 
  sta $4
 
  sta $4
 +
 +
สังเกตว่าการบวกและลบจะทำกับ register $0 เท่านั้น คำสั่ง sta และ lda เป็นการนำเข้าไปเก็บหรืออ่านค่าจาก register $0
 +
 +
== โครงสร้างส่วน data path ==
 +
 +
== ทดลองเขียน output ที่ควรเป็น ==
 +
 +
สัญญาณผลลัพธ์หลักควรเป็น regw0 (หมายเลข register ที่เขียนค่ากลับ) และ dataw0 (ค่าที่เขียนกลับไปที่ register file)  ให้เขียนสัญญาณดังกล่าวตลอดการทำงานของโปรแกรม
 +
 +
== เขียนสัญญาณ control ==
 +
 +
สัญญาณที่ต้องเขียนมีทั้งสิ้น 5 เส้น คือ
 +
 +
* reg1
 +
* regw0
 +
* reg_write_enabled
 +
* alu_op
 +
* outmux_sel
 +
 +
ให้ดาวน์โหลด [https://theory.cpe.ku.ac.th/~jittat/com-sys-lab/mock/mock.zip mock.zip] ในโค้ดดังกล่าว register_file มีการแก้ไขจากสัปดาห์ก่อน มีการสร้าง component ต่าง ๆ และต่อเชื่อมสายสัญญาณไว้เรียบร้อยแล้ว
 +
 +
จากนั้นให้แก้โค้ดใน sc_main ในส่วนที่เป็นการส่งสัญญาณควบคุมดังกล่าว เพื่อให้ data path ทำงานได้ถูกต้องตามโปรแกรม  ในการโปรแกรมให้แก้ในส่วนโค้ดด้านล่าง (มีตัวอย่างการสั่งซึ่งทำงานอะไรบางอย่าง)
 +
 +
<pre>
 +
  // control.preprogram(r1, rw0, we, aop, omsel)
 +
 +
  control.preprogram(1,2,1,0,0);
 +
  control.preprogram(1,3,1,0,0);
 +
  control.preprogram(2,0,1,0,1);
 +
  control.preprogram(2,3,1,0,0);
 +
</pre>
 +
 +
สัญญาณที่ใส่จะถูกเรียกทำงานไปตามลำดับ

รุ่นแก้ไขปัจจุบันเมื่อ 01:00, 24 มิถุนายน 2559

จาก com sys lab

ในส่วนนี้เราจะทดลองเขียนส่วน control unit โดยไม่ได้เขียนจริง แต่ให้จำลองสัญญาที่ control unit จะส่งออกมา (อ่านเพิ่มเติมเกี่ยวกับ instruction set ของ cpu ที่เราจะสร้างได้ที่ Com sys lab/instruction set)

เมื่อทำตามโปรแกรมด้านล่างนี้ ก่อนอื่นให้สมมติว่า register $1 มีค่าเป็น 1

add $0,$1
add $0,$1
sta $2
sub $0,$0
add $0,$1
add $0,$2
sta $3
lda $2
add $0,$3
sta $4

สังเกตว่าการบวกและลบจะทำกับ register $0 เท่านั้น คำสั่ง sta และ lda เป็นการนำเข้าไปเก็บหรืออ่านค่าจาก register $0

โครงสร้างส่วน data path

ทดลองเขียน output ที่ควรเป็น

สัญญาณผลลัพธ์หลักควรเป็น regw0 (หมายเลข register ที่เขียนค่ากลับ) และ dataw0 (ค่าที่เขียนกลับไปที่ register file) ให้เขียนสัญญาณดังกล่าวตลอดการทำงานของโปรแกรม

เขียนสัญญาณ control

สัญญาณที่ต้องเขียนมีทั้งสิ้น 5 เส้น คือ

  • reg1
  • regw0
  • reg_write_enabled
  • alu_op
  • outmux_sel

ให้ดาวน์โหลด mock.zip ในโค้ดดังกล่าว register_file มีการแก้ไขจากสัปดาห์ก่อน มีการสร้าง component ต่าง ๆ และต่อเชื่อมสายสัญญาณไว้เรียบร้อยแล้ว

จากนั้นให้แก้โค้ดใน sc_main ในส่วนที่เป็นการส่งสัญญาณควบคุมดังกล่าว เพื่อให้ data path ทำงานได้ถูกต้องตามโปรแกรม ในการโปรแกรมให้แก้ในส่วนโค้ดด้านล่าง (มีตัวอย่างการสั่งซึ่งทำงานอะไรบางอย่าง)

  // control.preprogram(r1, rw0, we, aop, omsel)

  control.preprogram(1,2,1,0,0);
  control.preprogram(1,3,1,0,0);
  control.preprogram(2,0,1,0,1);
  control.preprogram(2,3,1,0,0);

สัญญาณที่ใส่จะถูกเรียกทำงานไปตามลำดับ