Chào bạn MTAPIC,
Thôi được rồi, nếu bạn quyết dùng FPGA để làm bộ tạo tín hiệu xung thì tớ cũng sẽ giúp bạn. Trong bài viết này tớ một tả sơ lược các khối để bạn hiểu sơ qua. Nếu bạn cảm thấy làm vậy là được thì ta tiếp tục đi sâu vào chi tiết hơn của từng khối. Nếu không thì ta nên chỉnh lại ngay từ đầu.
Trước tiên ta cần có một tín hiệu đồng hồ. Ở đây tớ chọn tín hiệu đồng hồ là tín hiệu tần số cao f0 mà bạn đã vẽ trên hình. Mạch tạo tín hiệu đồng hồ f0 có thể dùng các IC của maxim mà tớ đã giới thiệu. Nếu bạn đồng ý hoặc có thắc mắc gì về chi tiết thì chúng ta sẽ bàn tiếp.
Sau đó bạn cần có một FPGA để tạo dạng tín hiệu (tớ đã nói trước fpga tạo tín hiệu đồng bộ rất kém về mặt thời gian nhưng tùy bạn). Bên trong FPGA có một loạt các khối chức năng hoạt động khác nhau và ta cũng cần điều chỉnh hay kiểm tra từ bên ngoài. Vì vậy trước tiên bạn phải tạo bên trong fpga một khối register mode, và controller. Register mode thực chất chỉ là những thanh ghi lưu trữ các giá trị được đưa vào từ bên ngoài. Tớ lấy ví dụ độ trễ của xung thứ 2 so với xung thứ nhất được xác định bằng một số nguyên chu kỳ đồng hồ nào đó. Giá trị này sẽ được lưu trữ trong một phần của register mode. Điều này cho phép bạn thay đổi độ trễ một cách linh hoạt từ bên ngoài. Khối controller có 2 nhiệm vụ chính là giao tiếp giữa fpga với bên ngoài và đều khiển các khối bên trong. Thông thường từ bên ngoài ta không nên điều khiển trực tiếp các khối nhỏ bên trong fpga mà nên thông qua khối controller này. Để điều khiển người ta trước hết ghi các giá trị cần thiết vào register mode (thông qua controller), sau đó phát lệnh. Khối controller này nếu đơn giản thì chỉ là một FSM, nhận lệnh vào rồi chuyển sang các trạng thái khác nhau để điều khiển các khối bên trong và đẩy dữ liệu ra bên ngoài.
Tớ giả thiết bạn sử dụng một máy tính để điều khiển fpga (như vậy là linh hoạt nhất). Nếu đơn giản bạn có thể dùng cable RS232 để kết nối đến FPGA nhưng khi đó bạn cẩn chuyển mức tín hiệu (RS232 làm việc với mức điện áp +-5V thì phải). Cái này bạn có thể dùng IC maxim max3238eai. Sau đó bên trong FPGA bạn cần một khối để làm nhiệm vụ giao tiếp theo chuẩn truyền dữ liệu RS232 (chuyển từ song song sang nối tiếp và ngược lại + tín hiệu bắt tay). Tín hiệu cuối cùng ở dạng song song 8 bit được đưa vào khối controller để điều khiển. Verilog code để làm giao tiếp RS232 này rất dễ nếu bạn đồng ý thì chúng ta cùng bàn tiếp.
Khối tạo tín hiệu xung sẽ nhận lệnh từ khối controller để phát xung. Khi ở trạng thái nghỉ, tất cả các xung đều có mức điện áp ra bằng 0. Khi controller phát lệnh chạy, khối này trước hết đọc các giá trị từ mode register để xác định độ trễ ban đầu của các xung, độ rộng xung, và chu kỳ xung. Verilog code để tạo các xung này cũng rất dễ viết.
Thôi được rồi, nếu bạn quyết dùng FPGA để làm bộ tạo tín hiệu xung thì tớ cũng sẽ giúp bạn. Trong bài viết này tớ một tả sơ lược các khối để bạn hiểu sơ qua. Nếu bạn cảm thấy làm vậy là được thì ta tiếp tục đi sâu vào chi tiết hơn của từng khối. Nếu không thì ta nên chỉnh lại ngay từ đầu.
Trước tiên ta cần có một tín hiệu đồng hồ. Ở đây tớ chọn tín hiệu đồng hồ là tín hiệu tần số cao f0 mà bạn đã vẽ trên hình. Mạch tạo tín hiệu đồng hồ f0 có thể dùng các IC của maxim mà tớ đã giới thiệu. Nếu bạn đồng ý hoặc có thắc mắc gì về chi tiết thì chúng ta sẽ bàn tiếp.
Sau đó bạn cần có một FPGA để tạo dạng tín hiệu (tớ đã nói trước fpga tạo tín hiệu đồng bộ rất kém về mặt thời gian nhưng tùy bạn). Bên trong FPGA có một loạt các khối chức năng hoạt động khác nhau và ta cũng cần điều chỉnh hay kiểm tra từ bên ngoài. Vì vậy trước tiên bạn phải tạo bên trong fpga một khối register mode, và controller. Register mode thực chất chỉ là những thanh ghi lưu trữ các giá trị được đưa vào từ bên ngoài. Tớ lấy ví dụ độ trễ của xung thứ 2 so với xung thứ nhất được xác định bằng một số nguyên chu kỳ đồng hồ nào đó. Giá trị này sẽ được lưu trữ trong một phần của register mode. Điều này cho phép bạn thay đổi độ trễ một cách linh hoạt từ bên ngoài. Khối controller có 2 nhiệm vụ chính là giao tiếp giữa fpga với bên ngoài và đều khiển các khối bên trong. Thông thường từ bên ngoài ta không nên điều khiển trực tiếp các khối nhỏ bên trong fpga mà nên thông qua khối controller này. Để điều khiển người ta trước hết ghi các giá trị cần thiết vào register mode (thông qua controller), sau đó phát lệnh. Khối controller này nếu đơn giản thì chỉ là một FSM, nhận lệnh vào rồi chuyển sang các trạng thái khác nhau để điều khiển các khối bên trong và đẩy dữ liệu ra bên ngoài.
Tớ giả thiết bạn sử dụng một máy tính để điều khiển fpga (như vậy là linh hoạt nhất). Nếu đơn giản bạn có thể dùng cable RS232 để kết nối đến FPGA nhưng khi đó bạn cẩn chuyển mức tín hiệu (RS232 làm việc với mức điện áp +-5V thì phải). Cái này bạn có thể dùng IC maxim max3238eai. Sau đó bên trong FPGA bạn cần một khối để làm nhiệm vụ giao tiếp theo chuẩn truyền dữ liệu RS232 (chuyển từ song song sang nối tiếp và ngược lại + tín hiệu bắt tay). Tín hiệu cuối cùng ở dạng song song 8 bit được đưa vào khối controller để điều khiển. Verilog code để làm giao tiếp RS232 này rất dễ nếu bạn đồng ý thì chúng ta cùng bàn tiếp.
Khối tạo tín hiệu xung sẽ nhận lệnh từ khối controller để phát xung. Khi ở trạng thái nghỉ, tất cả các xung đều có mức điện áp ra bằng 0. Khi controller phát lệnh chạy, khối này trước hết đọc các giá trị từ mode register để xác định độ trễ ban đầu của các xung, độ rộng xung, và chu kỳ xung. Verilog code để tạo các xung này cũng rất dễ viết.
Comment