Làm thế nào để tín hiệu Active High và Active Low hoạt động trong Hệ thống nhúng?


8

Đây là về cách thức hoạt động của bộ điều khiển vi mô nói chung ..

Trình lập trình mà chúng tôi thực hiện được chuyển đổi thành 1 và 0 bởi trình biên dịch và các mã dễ hiểu của máy này sau đó được tải vào vi điều khiển ..

Làm thế nào để vi điều khiển đáp ứng với điều này .. Ý tôi là các bộ 1 và 0 này được chuyển đổi thành điện áp logic tương ứng (5v và 0) bởi DAC? Nếu nó như vậy, làm thế nào mảnh silicon nhỏ này quyết định phải làm gì với các kết hợp khác nhau của 5v và 0v?

Tôi hiểu rằng mỗi IC đơn được tạo ra từ các cổng logic và các cổng này bao gồm các bóng bán dẫn .. Vậy làm thế nào để các bóng bán dẫn này phản ứng với các kết hợp khác nhau của 5v và 0v?

Điều gì khiến họ tìm kiếm những logic này .. Ý tôi là làm thế nào họ theo dõi các hướng dẫn này khi chúng được bật?

Vì vậy, chắc chắn phải có một Hệ điều hành được tải vào mcu để bảo nó xử lý và làm thế nào để xử lý các hướng dẫn này, phải không? ..

Điều tiếp theo là .. xem xét một bộ đếm thời gian .. nó chỉ đơn giản là một thanh ghi tăng lên sau mỗi chu kỳ đồng hồ .. Không phải hệ điều hành lại hướng dẫn mcu tăng sau mỗi đồng hồ sao? Tôi có đúng không Trong trường hợp đó, trong ngôn ngữ nào, tất cả mã cho một hệ điều hành được viết?

Tôi chỉ có thể tiến hành công việc của mình với việc lập trình mcu cho các nhiệm vụ khác nhau nhưng hôm nay tôi rất muốn biết mã của tôi được hiểu như thế nào bởi máy này ..

Xin lỗi vì câu hỏi của tôi dài để đọc .. xin vui lòng giúp tôi tìm hiểu những điều cơ bản này ..

Cảm ơn trước..


Tôi cho rằng mọi người sẽ có những loại câu hỏi này trong khi bắt đầu sự nghiệp của họ ..
VV Rao

tin nhắn bị xóa cảm thấy tồi tệ
Rick_2047

Câu trả lời:


6

Không cần phải sử dụng một bộ xử lý. Điện áp được sử dụng để đại diện cho 1 và 0 theo quy ước rằng mọi thứ dưới 0,8V (AKA 'thấp') đều bằng 0 và mọi thứ trên 2,4V (AKA 'cao') là một. Nó tương đối đơn giản để xây dựng các mạch thực hiện logic trên các điện áp đại diện này.

Ví dụ: một mạch có thể xuất ra một cái gì đó trong phạm vi 2.4V đến 5V để biểu thị '1' nếu đầu vào trên 2.4V hoặc một cái gì đó nhỏ hơn 0.8V và bạn có cổng OR. Nếu nó yêu cầu cả hai đầu vào đại diện cho 1 để xuất 2.4V, bạn có cổng AND. Một biến tần chỉ xuất ra mức cao khi đầu vào thấp và ngược lại. Bạn có thể xây dựng các cổng đơn giản như thế này chỉ với một vài bóng bán dẫn và thực hiện logic boolean kết hợp. Bằng cách sử dụng các nhóm bit để biểu diễn các số, bạn thậm chí có thể xây dựng các mạch để thêm số với logic tổ hợp, không cần phần mềm.

Khi bạn đang làm việc với các cổng, bạn có thể xây dựng dép xỏ ngón, và từ chúng, thanh ghi và bộ đếm. Dép xỏ ngón cho phép bạn lưu trữ 1 và 0 từ một thời điểm và sử dụng chúng sau này. Các thanh ghi và bộ đếm là các mạch thực hiện các chức năng trên các nhóm bit đại diện cho số. Một thanh ghi giữ một số cho đến khi bạn tải một số mới vào nó. Một bộ đếm giống như một thanh ghi, nhưng có một đầu vào khác làm cho số lượng lưu trữ tăng lên. (Giảm là có thể quá). Điều này đặt bạn vào vương quốc của các máy trạng thái và logic tuần tự, vẫn không có phần mềm cần thiết.

Hệ thống bộ nhớ là một cách để lưu trữ số lượng lớn bit. Ở cấp độ thành phần, một số bộ nhớ được xây dựng giống như một bộ sưu tập dép xỏ ngón khổng lồ, nhưng phổ biến hơn là có một công nghệ khác (DRAM), trong khi không chính xác là một flip flop, cũng làm điều tương tự.

Một bước nữa, bạn có thể xây dựng một hệ thống logic tuần tự và tổ hợp có thể thực hiện các hoạt động tùy thuộc vào các bit được lưu trữ trong hệ thống bộ nhớ, bao gồm ghi lại các giá trị mới vào hệ thống bộ nhớ đó. Bây giờ bạn đã đạt đến cấp độ của bộ xử lý và mọi thứ bộ xử lý làm, chỉ là phần cứng thực hiện rất nhiều tác vụ đơn giản. (lõi lập trình vi mô mặc dù). Tại thời điểm này, các tổ hợp bit cụ thể mà bạn đặt trong hệ thống bộ nhớ có thể được coi là phần mềm ngôn ngữ máy.


Bây giờ tôi đã hiểu rằng Transitor là cơ sở mà các bộ xử lý được tạo ra, tức là với một cổng như nand, chúng ta có thể tạo flipflops, thanh ghi, bộ đếm, alu và tất cả những thứ này cùng nhau tạo nên hệ thống máy tính. Đầu vào bóng bán dẫn có thể cao hoặc thấp (trên2,4v 0r dưới 0,8v) .. Câu hỏi của tôi là, thiết bị nào diễn giải 1 và 0 từ Trình biên dịch như logic tương ứng với các bóng bán dẫn này nếu không sử dụng DAC?
VV Rao

@Vicky Rao - Tôi nghĩ điều khiến bạn bối rối là bạn đang trộn lẫn các mức độ trừu tượng. Không có gì được yêu cầu để chuyển đổi đầu ra của trình biên dịch thành các mức logic cho bóng bán dẫn, bởi vì phần mềm 1 và 0, và phần cứng 1 và 0, chỉ là các chế độ xem khác nhau của cùng một thực tế vật lý. Ở một cấp độ trông giống như hàng triệu bóng bán dẫn thay đổi trạng thái, ở cấp độ khác trông giống như một bộ xử lý chạy phần mềm.
JustJeff

6

Nhận cuốn sách "Mã: Ngôn ngữ ẩn của phần cứng và phần mềm máy tính" của Charles Petzold . Nó là tuyệt vời, dễ đọc, và sẽ trả lời nhiều câu hỏi.

Nếu bạn không đủ khả năng mua sách của Petzold, thì hãy xem "Cách thức máy tính hoạt động" của Roger Young . Nó bao gồm nhiều thứ tương tự, và phiên bản HTML và PDF là miễn phí.


Ngoài ra một cuốn sách hay sẽ là Các yếu tố của hệ thống máy tính.
Rick_2047

5

Hãy xem xét một BJN NPN; một bóng bán dẫn. Một trong những phát hiện đầu tiên.

Bây giờ bạn kết nối nó sao cho bộ thu được kết nối với đầu vào logic biến đổi và bộ phát được kết nối với đầu vào logic khác, với một điện trở nối tiếp. Sau đó, một điện trở từ bộ phát xuống đất.

               logic
                 |
         10k   |/
logic --/\/\/--|  NPN
               |>
                 +-- output
                 |
                 /
                 \ 10k
                 /
                 |
                ---
                 -

Bạn vừa xây dựng một cổng AND. Đầu ra chỉ cao khi cả hai đầu vào đều cao. Nó không hoàn hảo bởi bất kỳ phương tiện nào vì nó phụ thuộc vào đầu vào của bộ thu và bởi vì nó không hoạt động tốt, nhưng nó cho bạn ý tưởng về cách sử dụng bóng bán dẫn để tính toán hàm.

Sau đó, bạn cũng có thể xây dựng một cổng KHÔNG;

                5V
                 |
                 /
                 \  10k
                 /
                 +-- output
                 |
         10k   |/
logic --/\/\/--|  NPN
               |>
                 |
                ---
                 -

Thêm điều này vào đầu ra của cổng AND vừa được xây dựng sẽ cho chúng ta một cổng NAND và bạn có thể biết rằng với một cổng NAND, bạn có thể xây dựng bất kỳ dạng logic nào. Nó cũng có lợi thế là tín hiệu được đệm, tăng khả năng ra quạt và khả năng xích.

Các bộ xử lý thực sự hiếm khi sử dụng các BJT, mà thay vào đó là logic CMOS, nhưng các nguyên tắc tương tự được áp dụng.


Bạn có thể sử dụng FETs thay vì NPNs :)
endolith

Đó là lý do tại sao tôi thêm vào điều này: "Bộ xử lý thực sự hiếm khi sử dụng của BJT, mà thay vào đó là logic CMOS, nhưng áp dụng các nguyên tắc tương tự." n-JFE và n-MOSFET có thể sẽ hoạt động tốt như các dạng estoric hơn như van.
Thomas O

Bạn cũng có thể sử dụng PNP để thực hiện KHÔNG theo cách tương tự như AND với NPN
Matt Williamson

3

Có lẽ bạn nên tra cứu một số tài liệu tham khảo hệ thống kỹ thuật số hoặc xem xét các thứ như VHDL. Một MCU được thiết kế cơ bản với các khối xây dựng, có thể là một loạt các cổng logic và các khối xây dựng (nhỏ hơn). Cuối cùng, tất cả đi xuống các cổng logic thực sự được sáng tác với các bóng bán dẫn. Một MCU đơn giản điển hình như PIC18F hoặc thứ gì đó không chạy hệ điều hành. Chương trình bạn tải vào đó là một loạt các hướng dẫn máy mà PIC chạy liên tục. Tất cả các công việc được thực hiện bằng phần cứng.

Một tổng giám đốc thường có ALU (tính kết quả của một lệnh nhất định) và nhiều khối hơn xung quanh nó để tải các lệnh, quản lý ngăn xếp và quản lý bộ nhớ. Công cụ kiểm tra có một vài thanh ghi để làm việc với chính nó, chủ yếu để tải đầu vào và lưu trữ kết quả. Bạn có thể không thấy nhiều điều này trong C hoặc ngôn ngữ khác nhưng rất nhiều trong đó được lắp ráp.

ALU xử lý các hướng dẫn với các mã hoạt động và đầu vào nhất định. Ví dụ, một hướng dẫn điển hình có thể là THÊM 12 1, có nghĩa là 12 + 1 = 13. Kết quả được lưu trữ trong một thanh ghi trên chính bộ công cụ.

Tùy thuộc vào kiến ​​trúc, ALU là ví dụ rộng 8 bit. Một bộ cộng 8 bit đơn giản có thể được tạo từ các bộ cộng 8 bit 1 bit được gắn với nhau (sử dụng các khối để xây dựng một khối lớn hơn). Một bộ cộng 1 bit có thể dễ dàng được ghi vào các cổng logic bằng cách sử dụng đại số boolean. Viết toàn bộ bộ cộng 8 bit bằng tay chỉ bằng cách sử dụng cổng logic sẽ là một khối lượng công việc điên rồ. Điều đó giống như viết một chương trình mà không có khả năng sử dụng bất kỳ chức năng hoặc chương trình con nào cả.

Để làm cho các hệ thống kỹ thuật số hoạt động chính xác, hầu hết các khối được thiết kế dựa trên đồng hồ. Mỗi hệ thống kỹ thuật số có một lượng thời gian nhất định cần thiết để đạt đến trạng thái kết thúc. Điều này là do sự chậm trễ chuyển đổi trong bóng bán dẫn và trạng thái ảnh hưởng đến các tiểu bang khác. Tín hiệu đồng hồ là thứ bạn nên làm quen, tốc độ mà bộ điều khiển chạy. Đồng hồ bấm giờ có thể là một thiết bị thực sự đơn giản, có một khối cộng nhỏ và tăng thêm 1 mỗi khi nó được tích tắc.


3

Đây là một chủ đề lớn và tôi không thể đưa ra một câu trả lời đơn giản nhưng ...

Bạn có thể tiến gần hơn một chút đến câu trả lời này bằng cách chia nhỏ và chinh phục, và vì câu trả lời khác cố gắng tấn công vấn đề này từ quan điểm hw, tôi sẽ thử từ chế độ xem SW cấp cao.

Nếu bạn viết một số phần mềm bằng giả sử mã c (mức độ trừu tượng rất cao), bạn không thực sự thấy những gì đang xảy ra không thực sự hiểu tất cả những thứ người yêu mà bạn đang hỏi về.

Nhưng dù sao hãy bắt đầu từ đó.

Một chương trình đơn giản chỉ cần inc một biến.

int main(void)
{
    int i=0;
    while(1) {
        i++;
    }
}

Sau đó, chúng ta cần lấy mã trình biên dịch để chúng ta có thể hiểu những gì đang xảy ra. Bước này có thể được thực hiện trên bất kỳ nền tảng nào bạn sử dụng, nhưng để đơn giản, tôi sử dụng gcc trên máy tính (nhưng nó không quan trọng ...)

gcc -O0 -S main.c -o main.lst

Sau đó, chúng tôi kết thúc với một cái gì đó như thế này:

    .file   "main.c"
    .text
.globl main
    .type   main, @function
main:
    pushl   %ebp
    movl    %esp, %ebp
    subl    $16, %esp
    movl    $0, -4(%ebp)
.L2:
    addl    $1, -4(%ebp)
    jmp .L2
    .size   main, .-main
    .ident  "GCC: (Ubuntu 4.4.3-4ubuntu5) 4.4.3"
    .section    .note.GNU-stack,"",@progbits

Sau đó, bạn cố gắng hiểu từng dòng mã và những gì nó làm.

Và sau đó bạn bắt đầu xem xét cách mọi hướng dẫn được thực hiện ... Ví dụ: subl

    subl    $16, %esp

Tại thời điểm này, nó khác nhau trên các kiến ​​trúc khác nhau và x86, arm, pic là loại khác nhau ... Nhưng vì ví dụ của tôi là x86.

Và ở cấp độ này khi bạn đọc bản sao, hầu hết các hành động sẽ trông giống như bạn chỉ đang di chuyển số xung quanh, và trong một số ý nghĩa, đây là những gì đang xảy ra. Chúng tôi có một chương trình xác định trước mà chúng tôi bước qua, chương trình này được lưu trữ trong một loại bộ nhớ flash thường là một loại logic điện tử nào đó sẽ bẫy một mức logic.

Nếu bạn thấy một số loại " Flip-flop " cho mỗi bit thì bạn là người gần gũi, và sau đó chúng ta cần rất nhiều thứ đó. Ở đây chúng tôi bắt đầu để tìm những người và số không của bạn.

Sau đó, để một số hành động xảy ra, chúng tôi thêm một số logic thú vị có thể chuyển đổi một số thành một số khác (CPU tự nó).

Và sau đó chúng tôi theo dõi chương trình từng bước một và để biết chúng tôi có bộ đếm chương trình (PC) ở đâu. Và di chuyển các số trở lại và thứ tư và lưu trữ chúng trong một bộ nhớ khác cũng là một loại lưới có flip-flop.

Nhưng chúng ta hãy quay lại một số ví dụ cụ thể một lần nữa, để hiểu rõ hơn về CPU, chúng ta có thể xem ALUbức tranh đơn giản này . Nơi bạn có thể thấy rằng khi chúng ta di chuyển dữ liệu vào khối logic này và chọn một số thao tác với các chân OP, chúng ta sẽ nhận được kết quả mới ở đầu ra. Rằng chúng ta lần lượt có thể di chuyển trở lại vào một nơi nào đó trong bộ nhớ.

Và lời nguyền ALU của bạn trong phần CPU của MCU của bạn phức tạp hơn cái này, nhưng nó hoạt động với cùng một nguyên tắc cơ bản.

Tại thời điểm này, chúng ta có thể thấy một số mạch logic thực hiện "hoạt động" ở một bên và một số lưu trữ ở phía bên kia. Và bộ lưu trữ có hai phần, một cho chương trình và một cho dữ liệu. Nhưng làm thế nào để chúng ta thực sự "di chuyển" sau đó, những thứ đó phải được kết nối theo một cách nào đó ...

Và đây là nơi chúng tôi kết nối những bộ phận đó với một số xe buýt.

Một bus chỉ là một số dây kết nối các phần khác nhau lại với nhau, và sau đó logic điều khiển sẽ cho bộ nhớ biết dữ liệu nào sẽ gửi lên bus này và phần nào của CPU sẽ nghe dữ liệu này được gửi. Và điều này được thực hiện với một số dòng điều khiển song song sẽ bật / tắt các phần khác nhau.

...


Vì vậy, nếu bạn chọn lựa một chương trình rất nhỏ và miễn là bạn không hiểu điều gì đang xảy ra, bạn sẽ mổ xẻ nó nhiều hơn cho đến khi bạn có một câu đố nhỏ có thể được sử dụng để tạo ra một "mcu".

Và đừng quên đọc bảng dữ liệu cho mcu của bạn và xem xét loại phần nào được tạo ra, như loại bộ nhớ, alu, bus, v.v.

Hy vọng điều này sẽ giúp một chút ???

Chúc may mắn


chiến lược giải thích của bạn bằng cách chia nhỏ các hướng dẫn làm cho nó thực sự dễ dàng .. cảm ơn ..
VV Rao

2

Bạn thực sự không cần phải biết những điều này trừ khi bạn tự thiết kế CPU, nhưng tất cả đều thuộc về một bộ máy nhà nước khổng lồ được triển khai trong phần cứng.

Vấn đề lớn nhất với loại câu hỏi này là câu trả lời rất lớn và mất vài năm các khóa học Đại học, vì vậy bất kỳ câu trả lời nào bạn nhận được ở đây chỉ là làm trầy xước bề mặt.

Nếu bạn thực sự muốn biết những gì đi vào CPU, hãy xem mã nguồn vhdl / verilog trên: http://opencores.org/projects

Chỉ cần học vhdl và verilog sẽ là một nhiệm vụ lớn của riêng nó, vì vậy bạn sẽ được đọc lâu :)


"Cỗ máy sân khấu khổng lồ" - nghe có vẻ như là một sản phẩm của Broadway.
OIO

May mắn thay, những câu trả lời mà những người này đã đưa ra không làm tôi trầy xước bề mặt như bạn đã đề cập, thay vào đó làm cho nó rõ ràng .. Dù sao, cảm ơn bạn ..
VV Rao

2

Ý tôi là những 1 và 0 này được chuyển đổi thành điện áp logic tương ứng (5v và 0) bởi DAC?

Không, không phải là một DAC. Các số 1 và 0 không bao giờ thực sự tồn tại. Chúng chỉ là một sự trừu tượng hóa toán học mà chúng ta sử dụng để làm cho việc lập trình dễ dàng hơn. Các điện áp kỹ thuật số thực tế có thể là 5 V, hoặc 3,3 V hoặc 1 V, tùy thuộc vào phần cứng. Cuối cùng, một máy tính chỉ là logic kỹ thuật số. Bộ nhớ lưu trữ 1 và 0 dưới dạng logic kỹ thuật số, mạch logic kỹ thuật số chuyển chúng từ bộ nhớ sang bộ xử lý, bộ xử lý là mạch logic kỹ thuật số có thể cộng, trừ hoặc so sánh các số nhị phân, v.v.

mảnh silica nhỏ này như thế nào

Silic a là thủy tinh, hỗn hợp silicon và oxy. Chip được làm từ silic tinh khiết trên , với các tạp chất được thêm vào những nơi cụ thể để tạo ra tất cả các bóng bán dẫn.

Tôi hiểu rằng mỗi IC đơn được tạo ra từ các cổng logic

IC kỹ thuật số được làm từ cổng logic, không phải IC tương tự.

Vậy làm thế nào để các bóng bán dẫn này phản ứng với sự kết hợp khác nhau của 5v và 0v?

Đọc ví dụ đơn giản nhất, biến tần CMOS .


Bạn đã giải thích rằng DAC không được sử dụng, 1 và 0 chỉ là sự trừu tượng hóa toán học mà chúng ta sử dụng để giúp lập trình dễ dàng hơn. Bạn có thể thêm chi tiết nhỏ hơn về điều này với tham chiếu đến "Trình biên dịch" không? trình biên dịch chuyển đổi ngôn ngữ cấp cao thành 1 và 0. Bạn nói rằng 1 và 0 này được lưu trữ trong bộ nhớ dưới dạng logic kỹ thuật số, mạch logic kỹ thuật số chuyển chúng từ bộ nhớ sang bộ xử lý .. Tên của thiết bị có chức năng này là gì ? Và một lần nữa, đầu vào của bộ xử lý sẽ là 5v hoặc 0v. Vậy thiết bị nào chuyển đổi 1 và 0 từ bộ nhớ (thực tế là từ trình biên dịch) thành 5v và 0v?
VV Rao

1
@Vicky: Không có chuyển đổi từ "1" thành 5 V. "1" và "0" chỉ là nhãn chúng tôi cung cấp cho điện áp cao và thấp khi làm toán với số nhị phân. Đối với logic cấp thấp đơn giản không hoạt động trên các số nhị phân, việc gọi chúng là "H" (cao) và "L" (thấp) phổ biến hơn.
endolith
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.