Networks Business Online Việt Nam & International VH2

Bài 7: Những điểm khác biệt trong lập trình phần cứng so với phần mềm – izTuts

Đăng ngày 08 November, 2022 bởi admin

Bài viết quan trọng nhất cho một nhà thiết kế kỹ thuật số mới

Mọi nhà tăng trưởng ứng dụng biết một ngôn từ như C hay Java đều có cùng yếu tố khi cố mở màn lập trình trong VHDL hoặc Verilog. Ngôn ngữ phần cứng có những độc lạ mà những bạn cần chú ý quan tâm, nó hoạt động giải trí khác so với những gì tất cả chúng ta đã từng làm trong lập trình ứng dụng. Nếu bạn mới tăng trưởng phần cứng và đã biết một hoặc hai ngôn từ ứng dụng nào đó, hãy đọc bài viết này để hiểu hơn về HDL. Bài viết này cung ứng những ví dụ về mã HDL và lý giải cách những mã hoạt động giải trí trong lập trình ứng dụng và trong lập trình phần cứng để cho bạn thấy sự độc lạ .

Giả định # 1: Tuần tự và song song

Đây có lẽ rằng là sự độc lạ cơ bản nhất giữa ngôn từ lập trình phần cứng và ứng dụng. Các nhà phong cách thiết kế ứng dụng lập ra những mã hoạt động giải trí tuần tự, nhưng có lẽ rằng họ không nhận ra điều này. Điều này có nghĩa là mã tuần tự là mỗi dòng mã được triển khai một tại một thời gian. Ví dụ : Dòng # 2 chỉ hoàn toàn có thể thực thi sau khi Dòng # 1 hoàn tất. VHDL và Verilog không cư xử theo cách này ! Chúng được gọi là những ngôn từ logic song song và toàn bộ những dòng mã hoàn toàn có thể và sẽ thực thi toàn bộ cùng một lúc. Đây là một ví dụ minh họa sự độc lạ giữa logic tuần tự và song song. Giả sử một nhà phong cách thiết kế muốn bật đèn LED một lần sau mỗi mười chu kỳ luân hồi đồng hồ đeo tay .

Mã phần mềm ví dụ:

12345678910111213

while(1)

{

if(count==9)

{

LED_on=1;

count=0;

}

else

{

LED_on=0;

count=count+1;

}

}

Mã VHDL tương tự :

123456789101112

P_INCREMENT:process(clock)

begin

ifrising_edge(clock)then

if(count<9)then

count<=count+1;

else

count<=0;

endif;

endif;

endprocessP_INCREMENT;

LED_on<=‘1’whencount=9else‘0’;

Ở mã phần mềm, mỗi dòng được thực thi theo thứ tự, dòng lệnh trước thực thi xong, sau đó dòng tiếp theo mới được phép thực thi. Điều này là không đúng trong VHDL và Verilog, và điều này được thể hiện bằng dòng cuối cùng gán tín hiệu LED_on. Dòng đó sẽ chạy đồng thời với quá trình VHDL. Nó luôn luôn gán một ‘1’ hoặc ‘0’ cho LED_on. Nếu đây là phần mềm, dòng này sẽ chỉ đạt được khi các dòng mã trước đã được thực thi. Một nhà thiết kế kỹ thuật số tốt cần phải luôn luôn nhớ rằng VHDL và Verilog là ngôn ngữ song song.

Giả định # 2: Đối với vòng lặp

Đây là một vấn đề lớn mà các nhà phát triển phần cứng mới có. Ví dụ, trong ngôn ngữ C ta đã từng sử dụng các vòng lặp rất dễ dàng, và có thể chúng ta nghĩ rằng các vòng lặp trong Verilog và VHDL cũng hoạt động như vậy! Thật không may, các vòng lặp trong ngôn ngữ phần cứng KHÔNG hành xử theo cùng một cách như trong phần mềm. Khi chưa hiểu cách các vòng lặp làm việc, bạn không nên sử dụng chúng.

Mã ứng dụng ví dụ :

12

For(inti=0;i<10;i++)

data[i]=data[i]+1;

Mã này sẽ lấy mọi giá trị trong mảng “ tài liệu ” và tăng nó bằng 1. Đây là mã tương tự trong VHDL :

123456789

P_INCREMENT:process(clock)

begin

ifrising_edge(clock)then

if(index<10)then

data[index]<=data[index]+1;

index<=index+1;

endif;

endif;

endprocessP_INCREMENT;

Chúng ta bắt đầu thấy sự khác biệt ở đây, mã C rất gắn, trong khi mã trong VHDL hoặc Verilog dài hơn, thực hiện nhiều công việc hơn. Một điều chắc chắn là: nếu bạn chưa thực hiện ít nhất 3 thiết kế FPGA bạn sẽ không bao giờ sử dụng được các vòng lặp. Vì vậy, suy nghĩ về cách mã bạn viết trong phần mềm có thể được viết lại để không bao giờ sử dụng vòng lặp for trong HDL. Thông thường tất cả những gì bạn cần là thêm một tín hiệu truy cập (như ở ví dụ trên) để làm điều tương tự với vòng lặp for.
Chúng ta khởi đầu thấy sự độc lạ ở đây, mã C rất gắn, trong khi mã trong VHDL hoặc Verilog dài hơn, thực thi nhiều việc làm hơn. Một điều chắc như đinh là : nếu bạn chưa thực thi tối thiểu 3 phong cách thiết kế FPGA bạn sẽ không khi nào sử dụng được những vòng lặp. Vì vậy, tâm lý về cách mã bạn viết trong ứng dụng hoàn toàn có thể được viết lại để không khi nào sử dụng vòng lặp for trong HDL. Thông thường tổng thể những gì bạn cần là thêm một tín hiệu truy vấn ( như ở ví dụ trên ) để làm điều tựa như với vòng lặp for .

Giả định # 3: Thực thi Mã ngay lập tức

Điều này tương quan đến logic song song. Các nhà tăng trưởng ứng dụng cần phải nhớ rằng một dòng mã không được triển khai ngay lập tức, với giá trị của tín hiệu được update để sử dụng. Một ví dụ dưới đây miêu tả cụ thể giả định này với trạng thái thiết bị. Ví dụ dưới đây cho thấy một thói quen khởi tạo cho một số ít thành phần ngoại vi thường thấy trong lập trình ứng dụng, mà không vận dụng trong lập trình phần cứng .
Mã ứng dụng ví dụ :

12345678

state=INITIALIZE;

data=5;

state=LOAD_1;

data=6;

state=LOAD_2;

data=1;

state=DONE;

data=0;

KHÔNG Mã phần cứng tương tự : ( Mã lỗi )

12345678910111213

P_STATE_MACHINE:process(clock)

begin

ifrising_edge(clock)then

state<=INITIALIZE;

data<=5;

state<=LOAD_1;

data<=6;

state<=LOAD_2;

data<=1;

state<=DONE;

data<=0;

endif;

endprocessP_STATE_MACHINE;

Biểu diễn phần cứng của mã này bị sai! Vì mỗi dòng trong một tiến trình thực thi đồng thời, data luôn bằng 0 và trạng thái  state luôn bằng DONE. Mã này sẽ không bao giờ thực thi máy trạng thái theo cách nó sẽ làm trong mã phần mềm. Mã đúng trong VHDL:
Biểu diễn phần cứng của mã này bị sai ! Vì mỗi dòng trong một tiến trình thực thi đồng thời, data luôn bằng 0 và trạng thái state luôn bằng DONE. Mã này sẽ không khi nào thực thi máy trạng thái theo cách nó sẽ làm trong mã ứng dụng. Mã đúng trong VHDL :Mã phần cứng tương tự :

123456789101112131415161718

P_STATE_MACHINE:process(clock)

begin

ifrising_edge(clock)then

if(state==INITIALIZE)then

data<=5;

state<=LOAD_1;

elsif(state==LOAD_1)then

data<=6;

state<=LOAD_2;

elsif(state==LOAD_2)then

data<=1;

state<=DONE;

elsif(state==DONE)then

data=0;

else

state<=INITIALIZE;

endif;

end

if;

Ba ví dụ trên là ba vấn đề mà các nhà phát triển phần mềm thường gặp khó khăn khi bắt đầu thiết kế phần cứng với VHDL hoặc Verilog. Ba vấn đề trên luôn luôn trong tâm trí của một nhà thiết kế kỹ thuật số mới. Các câu hỏi về lệnh song sang, các vòng lặp và việc thực thi mã phải luôn được đưa ra xem xét. Cần phải nắm vững những sự khác biệt trong ngôn ngữ phần cứng mới giúp bạn tìm hiểu sau hơn về FPGA.

Source: https://vh2.com.vn
Category : Tin Học