Thông báo
Collapse
No announcement yet.
Tâm sự về FPGA
Collapse
X
-
À mà quên, em làm theo đúng như tài liệu này nhưng cuối cùng vẫn không được. Bản e đang dùng là bản 10.1 còn trong hướng dẫn là 8.2 nó cũng có khác nhau đôi chút.
Leave a comment:
-
Câu này kông dám hỏi bác jefflieu: tại sao em import một USER_IP xong xuôi nhưng cuối cùng chẳng thấy thư mục drivers đâu cả để chỉnh sửa code thưa các bác.
Leave a comment:
-
Bạn vào hardware, generate bit file trước, hệ thống sẽ tao ra file system.bitNguyên văn bởi ngocdt2k3 Xem bài viếtEm đã làm đến bước tạo ra file elf bên SDK rồi. bước tiếp theo làm thế nào anh có thể nói rõ hơn ko ạ? nếu có hình thì càng tốt ạ.
Tronh hình mình post, o trong cửa sổ project của SDK có phần elf file đó, bạn chỉ đường dẫn vào file elf mà bạn tạo ra bằng SDK. Xong rồi trong phần hardware chọn "update bram", update bit file, file download.bit sẽ được tạo, file này có chứa sẵn code của bạn. trong Block RAM, khi download bit file xuống là chạy ngay.
Leave a comment:
-
Mình làm nó bị lỗi quái gì đó chưa biết. Bạn làm thử coi
... Đường lối ý tưởng khái niệm là vậy đó.
Leave a comment:
-
Về EDK thì có khái niệm như vầy bạn cần nắm rõ:Nguyên văn bởi ngocdt2k3 Xem bài viếtcảm ơn anh Jeplieu với phần kiến thức khá bổ ích về FPGA. chỉ tiếc chút xíu là e ko biết tý gì về verilog. Tiện đây a có thể làm một tutorial về phần tạo block ram để nạp code không ạ. Em đang bí chỗ này.
- Thiết kê phần cứng ở XPS
- Thiết kế phần mềm ở SDK
Khi thiết kế phần mềm bạn cần biết cấu hình của phần cứng: ví dụ như có bao nhiêu vùng nhớ, có các loại vùng nhớ nào ... Khi thiết kế trong SDK, bạn sẽ phải chỉ định một file để mô tả hệ thống phần cứng cho SDK hiểu phần cứng của bạn có gì. File này thay đổi theo thời gian, hồi xưa mình làm là file .xmp tức file project của XPS. Bây giờ mình mới làm thử lại thì la file .xml.
Bạn vô XPS tạo project mới gồm có
CPU
BLOCKRAM
BLOCKRAM Controller 1, nối vào Data Bus và vào cổng A của block RAM
BLOCKRAM Controller 2, nối vao Instruction Bus và vào cổng B của Block RAM
LED
Sau đó bạn export hệ thống phần cứng này qua SDK (bạn kiểm trong mấy cai menu, bản của bạn có thể khác bản của mình). Nếu dùng bản cũ có thể bạn không cần export.
Sau đó qua bên SDK, tạo một ứng dụng, mình thấy nó có sẵn mấy cái hello world, test peripherals gì đó bạn chọn đại đi. Bạn cần chỉ định file mô tả phần cứng của bạn, có thể là file xmp có thể là xml.
Sau đó bạn dịch ứng dụng của bạn ra file .elf
Sau đó ban qua bên EDK chỉ định file execuation của bạn là file .elf vừa tạo ra, bạn build hardware và update block RAM.
Nó sẽ tạo ra 2 file .bit
File system.bit là file chỉ có phần cứng
File download.bit là file có code ứng dụng của bạn sẵn trong BlockRAM
Bạn coi hình vẽ.
Leave a comment:
-
cảm ơn anh Jeplieu với phần kiến thức khá bổ ích về FPGA. chỉ tiếc chút xíu là e ko biết tý gì về verilog. Tiện đây a có thể làm một tutorial về phần tạo block ram để nạp code không ạ. Em đang bí chỗ này.
Leave a comment:
-
Ừ bạn thắc mắc có lý, đúng ra trình dịch sẽ báo lỗi, hay ít nhất là WARNING, ban kiếm trong synthesis report xem có warning ko. VHDL khá chặt chẽ trong việc gán tín hiệu khác kích thước như thế này nhưng cũng tùy nữa, nhiều khi chuẩn mới lại thả lỏng các yêu cầu. Nếu xuất warning thì mình đoán nó sẽ gán Least Significant Bit Của slv_reg0 vào port_led: nghĩa là slv_reg0(24 to 31) sẽ được gán, hay nói đúng hơn bit 24 tới bít 31 của slv_reg0 sẽ được nối vào port_ledNguyên văn bởi ngocdt2k3 Xem bài viếtEm có thắc mắc thế này, trong phần user_std_logic.VHD em có khai báo post led: led_port_pin: out std_logic_vector(0 to 7); Và gán :led_port_pin<=slv_reg0; điều em thắc mắc là
kích thước của port_led là 8 và của reg0 là 32 mà tại sao trình biên dịch lại ko báo lỗi(khi add user port em thấy 32 là kích thước thấp I rồi) và giá trị của port_led sẽ được gán ntn ạ?
Code bạn có vẻ hợp lý rồi, để tốt hơn bạn có thể ghi:
LED_PORT_mWriteReg(LED_REG,0,0x0000);
Trong đó LED_REG là địa chỉ được define trong led_port.h hoặc xparameters.h
Đối với các địa chỉ, bạn nên dùng các parameters được định nghĩa trong xparameters.h để khi bạn sắp xếp lại các vùng nhớ, bạn không cần viết code lại, vì xparameter.h sẽ được EDK viết lại.
Leave a comment:
-
Tại sao không phải là 0x12345001 mà là 0xC72000000 ? Giá trị bạn đưa vào macro LED_PORT_WRITE là giá trị bạn muốn ghi vào register slv_reg0.Nguyên văn bởi jefflieu Xem bài viếttrong phần khai báo IP user port, Em có khai báo sử dụng thanh ghi 32bit là slv_reg0(0xc7200000->0xc720ffff). Nên em nghĩ mình xuất giá trị ra thanh ghi này. Phần user_port.vhd: led_port<=slv_reg0; Vì giá trị của thanh ghi này sẽ được xuất ra port led.
Register slv_reg0 của bạn nằm ở đạ chỉ 0xC7200000
Bạn ghi : LED_PORT_WRITE(0xC7200001) có nghĩa là ghi giá trị 0xC7200001 vào điạ chỉ 0xC7200000?[/QUOTE]
Em có thắc mắc thế này, trong phần user_std_logic.VHD em có khai báo post led: led_port_pin: out std_logic_vector(0 to 7); Và gán :led_port_pin<=slv_reg0; điều em thắc mắc là
kích thước của port_led là 8 và của reg0 là 32 mà tại sao trình biên dịch lại ko báo lỗi(khi add user port em thấy 32 là kích thước thấp I rồi) và giá trị của port_led sẽ được gán ntn ạ?
Code e sửa thành:
#include"stdio.h"
#include"conio.h"
#include"led_port.h"
#include"xutil.h"
void delay(unsigned int n)
{
unsigned int i,j;
for(i=1;i<=n;i++)
{
for(j=1;j<=50;j++)
{
}
}
}
void main(void)
{
while(1)
{
LED_PORT_mWriteReg(0x7200000,0,0x0000);
delay(10000);
LED_PORT_mWriteReg(0x7200000,0,0x0001);
delay(10000);
}
return 0;
}
Leave a comment:
-
Ở đây có các project tương tự đã làm Projects :: OpenCores
Các bạn có thể đặt mục tiêu phát triển xong rồi đưa lên đó.
Leave a comment:
-
Đây là đề tài cũng hay và có thể làm được. Mình thấy bạn nên làm một vài nghiên cứu bước đầu:Nguyên văn bởi WhiteFangVN Xem bài viếtÝ mình "mức cao" ở đây có nghĩa là cố gắng mô tả được càng nhiều và càng tốt vi điều khiển avr càng tốt, không phải mức logic. Mình chưa thật sự nhận đề tài, bởi phải học hết kỳ này và còn phải đi thực tập, thời gian mình có là tầm 4 tháng.Thanks bạn nha ^^
- Cấu trúc đơn giản nhất của AVR, không biết bạn có thể kiếm ra tài liệu chi tiết của cấu trúc này không.
- Với 4 tháng thì mình nghĩ bạn cần 2 người, một người phát triển 1 người viết các testcase để chạy mô phỏng.
Leave a comment:
-
Ý mình "mức cao" ở đây có nghĩa là cố gắng mô tả được càng nhiều và càng tốt vi điều khiển avr càng tốt, không phải mức logic. Mình chưa thật sự nhận đề tài, bởi phải học hết kỳ này và còn phải đi thực tập, thời gian mình có là tầm 4 tháng.Thanks bạn nha ^^
Leave a comment:
-
trong phần khai báo IP user port, Em có khai báo sử dụng thanh ghi 32bit là slv_reg0(0xc7200000->0xc720ffff). Nên em nghĩ mình xuất giá trị ra thanh ghi này. Phần user_port.vhd: led_port<=slv_reg0; Vì giá trị của thanh ghi này sẽ được xuất ra port led.[/QUOTE]Nguyên văn bởi ngocdt2k3 Xem bài viết3) Vì sao giá trị bạn ghi vào LED lại là :0xC7200001?
Tại sao không phải là 0x12345001 mà là 0xC72000000 ? Giá trị bạn đưa vào macro LED_PORT_WRITE là giá trị bạn muốn ghi vào register slv_reg0.
Register slv_reg0 của bạn nằm ở đạ chỉ 0xC7200000
Bạn ghi : LED_PORT_WRITE(0xC7200001) có nghĩa là ghi giá trị 0xC7200001 vào điạ chỉ 0xC7200000?
Leave a comment:
-
Mình không hiểu khái niệm "thực hiện mô tả ở mức độ cao" của bạn.Nguyên văn bởi WhiteFangVN Xem bài viếtNice and slowly ! Mình thích topic này của Jefflieu, nó cho tôi thấy nhiều thứ cần thiết mà trên trường các thầy cô có lẽ quên không dậy,mình đang nhắm tới một cái đề tài bảo vệ hơi "siêu thực" một chút (với tôi thì thế ^^) là thực hiện mô tả ở một mức độ cao một bộ vi điều khiển 16 bit,hướng đến là trong họ avr. Thực sự xuất phát điểm của mình hiện tại là hơi thấp về mảng thiết kế số, nếu Jefflieu rảnh cho mình một vài cái định hướng và gợi ý, thực sự mình đang "bơi" theo nghĩa đen... Thanks Jefflieu trước !!!
Trong thiết kế kĩ thuật số có các mức độ sau:
- Gate level, bạn thiết kế ở mức cổng AND/OR
- Register transfer level, thiết kế ở mức Register, Multiplexer ...
- Cao hơn chút là behavioral level, mức hành vi, viết code VHDL và Verilog
- Transaction Level ... mức giao dịch, ở mức này, người ta không quan tâm đến việc giao tiếp giữa 2 module cụ thể diễn ra như thế nào, các tín hiệu bắt tay (handshake) như thế nào, bao nhiêu chu kì clock ... mà chỉ quan tâm là có một gói dữ liệu được trao đổi giữa 2 module.
Bạn có mấy tháng để làm đề tài?
Leave a comment:
Về tác giả
Collapse
Bài viết mới nhất
Collapse
-
Trả lời cho Giúp mình vẽ sơ đồ và phân tích nguyên lý làm việc của khảo sát các mạch nguồn ổn áp vớibởi Tuyenvc345
-
Channel: Hỗ trợ học tập
Hôm qua, 18:05 -
-
Trả lời cho Giúp mình vẽ sơ đồ và phân tích nguyên lý làm việc của khảo sát các mạch nguồn ổn áp vớibởi Tuyenvc345
-
Channel: Hỗ trợ học tập
Hôm qua, 18:04 -
-
bởi bqvietDiễn đàn vốn vắng, muốn vào viết bài trả lời chút nhưng cứ thấy luồng nào thành viên này mở thì cũng đồng thời xuất hiện ở Otofun, thế là chùn tay ... Thôi thì dientuvietnam không thể so sánh được về độ phổ cập, biết thân biết phận vậy.
-
Channel: Tâm tình dân kỹ thuật
Hôm qua, 17:49 -
-
bởi chinhnguyen9So sánh sóng 2 mạch nguồn Push-pull
· Sóng vuông giửa 2 cực D của mạch Pushpull trong module inverter 24-220V sine giả của TQ. Mạh điện này khá đặc biêt ở chổ, không thấy mạch snubber mà hiêu quả triêt sóng hài quá tốt dù hoạt...-
Channel: Nguồn!
Hôm qua, 14:27 -
-
bởi chinhnguyen9Mạch điên bếp tù gộm 2 khối:
Khối điêu khiển:
-Thiết lập công suất nấu
-Thiết lập thời gian nấu
-Kiểm tra có đặt nồi hay không, đúng loại hay không?
-Có quá nhiệt không?
Khối công suất:
- Nắn+ lọc điên AC ra 310VDC +loọc nhiểu...-
Channel: Hướng dẫn sử dụng diễn đàn
Hôm qua, 14:05 -
-
bởi ittcHi các bác, sau khi được vài lời khuyên thì em có vào lướt web để xem vài mẫu máy, thì ở phần thông số kỹ thuật của máy, thấy họ để vài thông số sau thì em không rành lắm, nhờ các bác giải thích hộ em được không, cụ thể như hình...
-
Channel: Điện tử gia dụng
15-03-2026, 18:34 -

Leave a comment: