Mục lục:

Máy tính Ten Bit - VHDL: 4 bước
Máy tính Ten Bit - VHDL: 4 bước

Video: Máy tính Ten Bit - VHDL: 4 bước

Video: Máy tính Ten Bit - VHDL: 4 bước
Video: VHDL – FPGA. Bài 361: Mạch chuyển đổi số hex 4 bit sang BCD. Chương 3: Thiết kế mạch tổ hợp. 2024, Tháng mười hai
Anonim
Máy tính Ten Bit - VHDL
Máy tính Ten Bit - VHDL

Thực hiện bởi: Tyler Starr và Ezzeedden Gazali

Giới thiệu

Dự án này đã được hoàn thành như một phần của dự án cuối cùng cho CPE 133 tại Cal Poly SLO. Đó là một dự án tuyệt vời cho những người muốn hiểu cách máy tính hoạt động ở cấp thấp nhất và cách chúng đạt được nhiệm vụ của mình. Dự án được mô phỏng theo máy tính SAP 8-bit được mô tả trong cuốn sách Điện tử Máy tính Kỹ thuật số của Albert Malvino. Tuy nhiên, chúng tôi đã tăng máy tính lên 10-bit để cho phép triển khai nhiều mã op (mã hoạt động) hơn. Người dùng có thể lập trình máy tính để thực hiện một tập hợp các thao tác bằng cách nhập các lệnh nhất định.

Kiến trúc hệ thống và mạch:

Máy tính được viết bằng VHDL và sẽ được chứa trên bảng Basys 3 từ Digilent. Các đầu vào sẽ được ánh xạ tới các công tắc ở dưới cùng của bảng. Hai công tắc xúc giác sẽ được sử dụng cho các chức năng Đặt lại và Ghi. Đầu ra sẽ được hiển thị trên màn hình 7 đoạn của bo mạch.

Máy tính sẽ được chia nhỏ thành các mạch (mô-đun) nhỏ hơn để xử lý các hoạt động khác nhau. Mỗi mô-đun sẽ được giải thích chi tiết trong các bước sau.

Bước 1: Vật liệu

Vật liệu
Vật liệu

Tất cả những gì cần thiết cho dự án này là bo mạch Basys3 FPGA từ Digilent và một dây micro USB để kết nối bo mạch với máy tính của bạn.

Bước 2: Sơ đồ khối của các mô-đun mạch

Sơ đồ khối của các mô-đun mạch
Sơ đồ khối của các mô-đun mạch
Sơ đồ khối của các mô-đun mạch
Sơ đồ khối của các mô-đun mạch
Sơ đồ khối của các mô-đun mạch
Sơ đồ khối của các mô-đun mạch

Các sơ đồ khối ở trên cho thấy các mô-đun mạch khác nhau tạo nên máy tính 10-bit. Dưới đây là mô tả cho từng bộ phận / mô-đun riêng lẻ được hiển thị trong sơ đồ trên.

Bộ đếm chương trình

Mô tả đầu vào: đầu vào là đầu vào 5 bit để tải một số vào bộ đếm chương trình. Cp khi cao bộ đếm trên các cạnh đồng hồ rơi xuống. Clr đặt lại bộ đếm về 0. Ep khi bộ đếm cao xuất ra số lượng hiện tại. Sp khi cao bộ đếm đặt số đếm thành số trên đầu vào

  • Mô tả kết quả đầu ra:

    đầu ra là bản sao của số đếm để sử dụng trên LEDS 0-15. Đếm đầu ra số đếm hiện tại.

  • Vị trí tổng thể trong hệ thống: Bộ đếm này theo dõi vị trí bộ nhớ mà chương trình đang ở trong đó. Tất cả các chương trình bắt đầu từ địa chỉ bộ nhớ 00000 (0) và lên đến 11111 (31), trừ khi sử dụng lệnh tạm dừng. Trong các câu lệnh nhảy, bộ đếm chương trình tiếp tục đếm từ địa chỉ mà chương trình đang nhảy tới.

Nhập MUX

  • Mô tả đầu vào: Địa chỉ lấy đầu vào từ các chuyển mạch 11 đến 15. MAR lấy đầu vào từ thanh ghi 10 bit được sử dụng làm MAR. Chương trình kiểm soát đầu vào nào để định tuyến đến đầu ra.
  • Mô tả đầu ra: đầu ra định tuyến đầu vào đã chọn tới RAM.
  • Vị trí tổng thể trong hệ thống: MUX này xác định xem định tuyến địa chỉ từ các thiết bị chuyển mạch hoặc xe buýt đến RAM. Trong chế độ chương trình, địa chỉ từ các thiết bị chuyển mạch được định tuyến và trong chế độ chạy, địa chỉ từ xe buýt được định tuyến.

ramMUX

  • Mô tả đầu vào: userInput là đầu vào mà người dùng nhập trong chế độ chương trình. aRegInput là dữ liệu có trong thanh ghi A, dữ liệu này được sử dụng trong một hoạt động di chuyển. kiểm soát là lựa chọn cho MUX này.
  • Mô tả đầu ra: đầu ra là đầu vào dữ liệu 10 bit vào RAM.
  • Vị trí tổng thể trong hệ thống: MUX này xuất dữ liệu đầu vào 10 bit được sử dụng trong mô-đun RAM. Khi bit điều khiển cao, MUX xuất dữ liệu mà người dùng đã nhập ở chế độ chương trình. Khi bit điều khiển ở mức thấp, MUX xuất dữ liệu trên bus điều khiển.

ramModule

  • Mô tả Inputs: inputData là dữ liệu đang được lưu trữ trong RAM. inputAddress là vị trí mà dữ liệu đang được lưu trữ. chương trình cho biết máy tính đang ở chế độ lập trình hay chạy. readWrite cho biết liệu một thao tác đọc hoặc ghi có đang diễn ra hay không. notCE là bit điều khiển cho mô-đun RAM. di chuyển cho biết rằng một hoạt động di chuyển đang được thực hiện.
  • Mô tả đầu ra: outputDataToBus là dữ liệu đi từ RAM đến bus. outputData và output Address là dữ liệu và địa chỉ đi đến thanh ghi lệnh.
  • Vị trí tổng thể trong hệ thống: RAM cho phép lưu trữ chương trình và dữ liệu trong bộ nhớ trước khi chương trình chạy. Khi chương trình đang chạy, RAM nhận một địa chỉ từ MAR và xuất dữ liệu tại địa chỉ đó tới bus.

địa chỉ

  • Mô tả đầu vào: opCode là đầu vào chứa địa chỉ của opcode đang được thực hiện bởi máy tính
  • Mô tả đầu ra: opCodeStart là địa chỉ bộ nhớ cho biết vị trí vi lệnh đầu tiên của opCode tương ứng.
  • Vị trí tổng thể trong hệ thống: Mô-đun này nhận lệnh vi mô đã chốt và xuất ra vị trí bộ nhớ tương ứng với phần bắt đầu của chuỗi lệnh vi mô đó.

ringCounter

  • Mô tả đầu vào: thiết lập lại đặt bộ đếm trở lại 100000 ("trạng thái T" đầu tiên). Clk tăng dần bộ đếm lên một cạnh đồng hồ đang giảm. NOP chỉ ra rằng trạng thái / chu kỳ hiện tại là một chu kỳ "không hoạt động".
  • Mô tả đầu ra: count là đầu ra của bộ đếm.
  • Vị trí tổng thể trong hệ thống: Bộ đếm vòng điều khiển bộ đếm có thể cài đặt trước và xác định sáu bước vi mô trong mỗi chu kỳ lệnh (T1-T6).

preCounter

  • Mô tả Đầu vào: opCodeStart là vị trí bộ nhớ của các lệnh vi mô cho opCode đang được thực hiện. T1 đặt lại bộ đếm về 0 khi nó ở mức cao. Khi T3 ở mức cao, opCodeStart được tải và việc đếm tiếp tục từ vị trí đó trong 3 chu kỳ còn lại (T4-T6). Clr đặt bộ đếm đến 0. Số gia tăng của bộ đếm Clk từng cái một trên một cạnh rơi.
  • Mô tả kết quả đầu ra: controlWordLocation xuất ra vị trí bộ nhớ của từ điều khiển sẽ được thực thi.
  • Vị trí tổng thể trong hệ thống: Mỗi mã op có 3 hướng dẫn vi mô. Bộ đếm tăng 1 bắt đầu từ 0 trong 3 chu kỳ đầu tiên (chu kỳ tìm nạp). Sau đó, bộ đếm được kích hoạt bởi bộ đếm vòng để tải địa chỉ trên opCodeStart và tăng 1 trong 3 chu kỳ còn lại. Bằng cách này, Bộ đếm tiền kiểm soát trình tự các lệnh vi mô được thực hiện.

controlROM

  • Mô tả đầu vào: controlWordLocation là địa chỉ của controlWord mà controlROM sẽ xuất ra. NOP chỉ ra rằng vị trí là một vị trí "không hoạt động".
  • Mô tả kết quả đầu ra: controlWord là từ điều khiển cho phép / vô hiệu hóa các mô-đun máy tính khác nhau để thực hiện một hoạt động mong muốn.
  • Vị trí tổng thể trong hệ thống: Mô-đun này giải mã vị trí bộ nhớ từ Bộ đếm tiền và xuất ra ControlWord cho hoạt động mong muốn.

ALU

  • Mô tả các đầu vào: A và B là các đầu vào từ thanh ghi A và thanh ghi B mà ALU thực hiện các phép toán số học và logic. Khi phép trừ đang hoạt động, nó chỉ ra rằng B đang bị trừ khỏi A.
  • Mô tả kết quả đầu ra: kết quả là kết quả của việc cộng A và B hoặc trừ B khỏi A. Kết quả đầu ra lớn hơnThan, lessThan và bằng Để cho biết nếu (AB, hoặc A = B) và được sử dụng trong mô-đun nhảy có điều kiện. lỗi chỉ ra một phần tràn hoặc phần dưới khi hoạt động.
  • Vị trí tổng thể trong hệ thống: ALU chứa logic cho các phép toán số học và logic được thực hiện bởi máy tính. Mô-đun này có thể cộng và trừ hai số nhị phân 10-bit. ALU cũng có thể xác định xem A> B, A

có điều kiện

  • Descriptoin of Inputs: inputCount được sử dụng để chốt số lượng hiện tại. inputAddress được sử dụng để chốt địa chỉ sẽ được chuyển đến. loadFromRegister khi đầu vào chốt thấpĐịa chỉ. loadCount khi chốt inputCount thấp. khi outputEnable ở mức thấp, đầu ra được đặt thành địa chỉ để nhảy tới. gT, iT và eQ xác định điều kiện nào đang được kiểm tra. greatThan, lessThan và equalTo là các đầu vào từ ALU cho biết kết quả của phép so sánh giữa A và B. Trên cạnh xung nhịp tăng của Clk, inputCount và inputAddress được đọc vào các thanh ghi.
  • Mô tả đầu ra: outputJmp là địa chỉ mà bộ đếm chương trình sẽ đọc.
  • Vị trí tổng thể trong hệ thống: mô-đun này xử lý các bước nhảy có điều kiện và không có điều kiện cho máy tính. Dựa trên các đầu vào gT, iT và eQ, mô-đun xác định điều kiện nào cần kiểm tra và điều kiện đó là đúng hay sai. Nếu điều kiện là đúng, nó sẽ xuất ra địa chỉ của lệnh để nhảy tới, ngược lại, nó sẽ xuất ra số lượng lệnh tiếp theo.

binToBCD

  • Mô tả Đầu vào: đánh số 10 bit để chuyển đổi thành số thập phân được mã hóa nhị phân.
  • Mô tả Kết quả: chữ số hàng trăm ở vị trí hàng trăm của số nhị phân. chữ số hàng chục ở vị trí hàng chục của số nhị phân. chữ số hàng đơn vị ở vị trí hàng đơn vị của số nhị phân.
  • Vị trí tổng thể trong hệ thống: Mô-đun này chuyển đổi số 10 bit từ thanh ghi đầu ra sang BCD để trình điều khiển hiển thị bốn chữ số của chúng tôi hiển thị số ở dạng thập phân trên màn hình 7 đoạn.

fourDigitDriver

  • Mô tả đầu vào: số là đầu vào nhị phân 16 bit được điều khiển đến bộ giải mã. inClk là đồng hồ bên trong bảng Basys và được sử dụng cho một bộ chia xung nhịp. RST đặt lại đồng hồ được sử dụng để điều khiển các chữ số.
  • Mô tả đầu ra: cực dương xác định vị trí chữ số nào sẽ được chiếu sáng. chữ số là số đầu vào cho bộ giải mã.
  • Vị trí tổng thể trong hệ thống: Mô-đun này điều khiển bộ giải mã xuất số BCD ra màn hình.

người giải mã

  • Mô tả đầu vào: inputNumber là chữ số đến từ trình điều khiển và sẽ được giải mã.
  • Mô tả kết quả đầu ra: cực âm xác định cực âm nào sẽ được bật để hiển thị chữ số mong muốn.
  • Vị trí tổng thể trong hệ thống: Mô-đun này giải mã chữ số sẽ được hiển thị trên màn hình 7 phân đoạn.

FourDigitDisplay

  • Mô tả đầu vào: số là số được hiển thị trên màn hình 7 đoạn. lỗi cho biết khi nào màn hình sẽ đọc "Err". Clk là tín hiệu đồng hồ cho biết màn hình đang chạy. Tín hiệu này phải ở khoảng 60 Hz để màn hình có thể hiển thị tất cả các vị trí 4 chữ số cùng một lúc.
  • Mô tả đầu ra: cực dương xác định vị trí chữ số nào được kích hoạt. cực âm xác định cực âm nào được kích hoạt để hiển thị chữ số mong muốn.
  • Vị trí tổng thể trong hệ thống: Mô-đun này hiển thị một số trên màn hình 7 phân đoạn. Tham khảo hướng dẫn sử dụng bo mạch Basys 3 để biết thông tin về cách kích hoạt cực âm và cực dương để sử dụng màn hình. Khi bit lỗi cao, màn hình hiển thị "Err".

outputMUX

  • Mô tả đầu vào: progModeInput xác định led nào được bật trong chế độ lập trình. runModeInput xác định led nào được bật trong chế độ chạy. modeSelect là bit chọn hoặc điều khiển cho MUX.
  • Mô tả đầu ra: ledOutput cho biết led nào sẽ được bật.
  • Vị trí tổng thể trong hệ thống: Tùy thuộc vào chế độ mà máy tính đang ở (chương trình hoặc rum), MUX sẽ bật đèn led khác nhau. Trong chế độ chương trình (modeSelect là '0'), MUX bật đèn led để giống với vị trí bộ nhớ mà máy tính đang ở và những gì nó chứa. Trong chế độ chạy (modeSelect là '1'), MUX được sử dụng để gỡ lỗi nhưng có thể được đặt để hiển thị bất kỳ thứ gì khác.

clockDivider

  • Mô tả đầu vào: dừng đọc năm bit MSB từ bus để phát hiện lệnh dừng ('11111') và dừng đồng hồ. inputClk là tín hiệu xung nhịp bên trong của bo mạch Basys 3.
  • Mô tả Kết quả đầu ra: ouputClk là đồng hồ mới đã bị làm chậm.
  • Vị trí tổng thể trong hệ thống: Đồng hồ này được sử dụng để làm chậm máy tính để giúp người dùng có thể xác định điều gì đang xảy ra. Đồng hồ có thể chạy nhanh hơn nhiều, tuy nhiên, nó hiện được đặt ở 2 Hz.

triStateBuffer

  • Mô tả đầu vào: Din là đầu vào 5 bit đi vào bộ đệm. Ep là bit điều khiển.
  • Mô tả kết quả đầu ra: Dout là đầu ra 5 bit của bộ đệm
  • Vị trí tổng thể trong hệ thống: Khi bit điều khiển Ep hoạt động, bộ đệm xuất đầu vào. Khi bit điều khiển không hoạt động, bộ đệm sẽ không xuất ra bất kỳ thứ gì.

tenBitDRegister

  • Mô tả các đầu vào: Dbus là đầu vào mà thanh ghi sử dụng. Clk cho phép thanh ghi đọc dữ liệu trên một cạnh xung nhịp tăng. ARST đặt thanh ghi thành 0 một cách không đồng bộ. Khi outputEnable ở mức thấp, nội dung của thanh ghi là đầu ra. Khi readIn ở mức thấp, thanh ghi sẽ chốt Dbus trên cạnh xung nhịp tăng.
  • Mô tả đầu ra: Qbus là đầu ra của thanh ghi
  • Vị trí tổng thể trong hệ thống: Thanh ghi được sử dụng nhiều lần trong toàn bộ máy tính và được sử dụng để lưu trữ thông tin khi thực hiện các hoạt động.

fiveBitDRegister

  • Mô tả các đầu vào: Dbus là đầu vào mà thanh ghi sử dụng. Clk cho phép thanh ghi đọc dữ liệu trên một cạnh xung nhịp tăng. ARST đặt thanh ghi thành 0 một cách không đồng bộ. Khi outputEnable ở mức thấp, nội dung của thanh ghi là đầu ra. Khi readIn ở mức thấp, thanh ghi sẽ chốt Dbus trên cạnh xung nhịp tăng.
  • Mô tả đầu ra: Qbus là đầu ra của thanh ghi.
  • Vị trí tổng thể trong hệ thống: Thanh ghi được sử dụng nhiều lần trong toàn bộ máy tính và được sử dụng để lưu trữ thông tin khi thực hiện các hoạt động.

Bước 3: Mã

Dưới đây là thư mục chứa các tệp nguồn và ràng buộc cho máy tính 10-bit.

Bước 4: Demo và Mã mẫu

Video trên hướng dẫn cách lập trình máy tính 10-bit trên bảng FPGA Basys 3. Bên dưới cũng đính kèm một bản pdf chứa mã op và chương trình mẫu.

Đề xuất: