Thông báo

Collapse
No announcement yet.

FPGA và các giải pháp ứng dụng trong Công Nghệ Quân Sự!

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • #91
    Cuối cùng cũng xác định được hướng đi ... để tiện thì các bạn cứ thảo luận tiếp, mình tin rằng 1 bài toán không thuộc riêng một lĩnh vực nào cả, kết hợp nhiều thứ, RF, software, OS, thậm chí có thể cả vật liệu ... v.v. Vấn đề là mọi bài post cần phải xoay quanh giải quyết một câu hỏi liên quan...
    Mình thấy các bạn cứ thảo luận tiếp ở đây.

    Comment


    • #92
      Bạn MTAPIC,

      Tớ muốn hỏi bạn mấy cái. Tớ đọc trên mạng thì hình như giao động do magnetron tạo ra không thay đổi tần số được tần số của nó phụ thuộc vào kích thước bên trong của magnetron. Ngoài ra năng lượng từ magnetron tạo ra truyền ra ngoài bằng waveguide thì tín hiệu tạo ra đúng là khó thay đổi tần số được. Nếu như vậy đối phương cứ nhè đúng tần số đó mà can nhiễu thì các bạn phải làm thế nào? Bên cạnh việc dùng các radar để phát hiện mục tiêu cũng như tên lửa, các bạn còn phải điều khiển tên lửa nữa. Vậy phần truyền tín hiệu điều khiển đi này các bạn sử dụng phương pháp mã hóa số hay tương tự và cụ thể là mã hóa bằng phương pháp nào. Nếu bạn dùng phương pháp mã hóa số thì chắc là có mã sửa lỗi. Trong truyền thông người ta hay dùng mã hóa viterbi còn các bạn dùng phương pháp gì? Để pháp tín hiệu được mã hóa đi với công suất lớn thì chắc các bạn phải dùng cách gì khác chứ magnetron chắc không được. Tớ cũng muốn biết bạn dùng cách gì?

      Nói vui một chút, các bạn bên quân sự làm việc với mấy trạm phát cao tần công suất đến cả vài MW vậy có sợ không? Tớ nghe nói tín hiệu cao tần gây vô sinh đó. Hiện nay người ta mới dùng di động công suất có khoảng vài Watt mà đã nói có thể gây u não, vậy ở chỗ các bạn làm việc thì mệt rồi. Tớ có người quen ngày trước là cán bộ nghiên cứu ở viện kỹ thuật quân sự. Bà này làm về hóa, cũng có sao gạch hẳn hỏi nhưng cứ mở mồm ra là chửi quân đội. Cái này là bởi bà ấy bị bắt phải làm việc với toàn những chất độc hại mà không cãi lại sếp được. Sức khỏe của bà ấy ngày một kém đi, vậy mà xin chuyển vị trí công tác mãi không được. Xong rồi chắc nghe bà ấy chửi mãi mấy sếp ngứa lỗ tai nên cuối cùng bà ấy cũng đi được.

      Comment


      • #93
        Hi,
        thư nhất nhé,đúng là manhetron không thay đổi tần số được nhưng mà làm sao mà địch biết là mình phát tần số bao nhiêu? vì có phải manhetron nào cũng giốn cái nào đâu?
        Còn nhiễu thì chắc chắn là có,không có mới là lạ thôi.Nhưng Người nga cũng có những cái hay.Đồ của Nga không theo một tiêu chuẩn nào nhất là đồ quân sự (thế mới ác !).Họ tính toán và để ra những tiêu chuẩn chọn bắt mục tiêu.Mọi người cứ hiểu là để xác định mục tiêu hay là nhiễu thì nó phải có những ưu tiên nhất định về năng lượng của tín hiệu mục tiêu hay nhiễu.Nó phải vượt qua được các tiêu chuẩn được cài đạt trước.Còn nó là gì thì cũng không tiện nói lắm! hj!
        Tên lửa làm việc rất chặt chẽ,liên tục giải các bài toán trong quá trình bay.Việc điều khiển tên lửa thì có rất nhiều phương pháp.Việc phát lệnh thì thường dùng trên tên lửa phòng không cũ.Nội dung là gì thì anh MTAPIC rõ hơn minh.Mình không chuyên mảng này! Có phương pháp nữa là bắn theo tọa độ thì như mọi người biết kiểu như tên lửa đạn đạo ấy! Một loại nữa mà cũng khá phổ biến bây giờ (Các nước sản xuất VK cũng đang làm theo hương này!) Đó là Guidance= Tự dẫn.Hiểu sâu là cả một mảng lớn nhưng mọi người hiểu cơ bản thì giống như vác cả cái đài radar lên tên lửa và thông tin đầu vào được lấy trực tiếp tồi mang tới máy tính quyết định quỹ đạo.....
        Sơ sơ thì thế thôi,còn nếu bạn nào làm trong lĩnh vực quân sự nhưng không chuyên về TL mà muốn tìm hiểu thì liên hệ anh MTAPIC hoặc mình để tìm hiều thêm!

        Thứ hai,Cái gì cũng có cái giá của nó! Ăn cơm Đảng,mặc áo dân thì phàn nàn làm chi? Cố gắng thôi.Chuyện độc hại thì có,nhưng cái gì cũng có quy trình và quy định an toàn hết.Làm theo đó thì không có chuyện gì xảy ra cả.Chẳng qua là chuyên môn kém,ý thức kỉ luật không tốt thì mơi thế thôi! Làm việc trên trạm phát thì cũng như chụp X-Quang vậy! Làm việc theo ca,kíp chứ có 24/7/365 đâu? Mình thấy các thầy và anh mình quen ấy,sinh con rõ khỏe mà! Không tin thì thử coi ! Hí hí!

        Comment


        • #94
          Nguyên văn bởi Rommel.de Xem bài viết
          Nhân tiện bạn có thể nói chi tiết mục đích sử dụng cũng như lý do vì sao các xung có độ trễ so với nhau như trên hình bạn đưa được không. Tớ nghĩ rằng nếu mọi người hiểu rõ hơn về điểm này thì sẽ tránh được những tranh luận không cần thiết.
          Cái này mình cũng chỉ đoán thôi,thực tế thì phụ thuộc bài toán anh MTAPIC đưa! Cũng muốn biết sơ qua xem có giống bài toán mình đang định làm không!

          Comment


          • #95
            Nếu như đúng là radar dùng magnetron của các bạn chỉ phát các xung tín hiệu đơn tần thì dở rồi. Việc xác định tần số thì dễ quá, đối phương chỉ cần dùng một máy phân tích phổ là đọc được liền. Từ đó đối phương có thể đọc được các xung tín hiệu do radar phát đi, sau đó có thể phát ngược lại các xung có cùng tần số và thời gian nhưng được giữ chậm lại hoặc làm sớm lên thì phần xử lý tín hiệu của radar cũng đã tính toán sai hết rồi.

            Còn cái mà bạn gọi là hay của bọn Nga thì tớ nghĩ hầu hết những người làm kỹ thuật đều cho đó là ngu xuẩn. Bạn còn là sinh viên nên chưa bao giờ phải làm việc với các projects theo kiểu chẳng có tiêu chuẩn gì cả. Thường khi bọn tớ làm project có nhiều nhóm phối hợp với nhau, mỗi người một việc nhưng cũng cần liên hệ tốt với nhau. Thông thường kỹ sư làm thiết kế các kiểu chẳng mấy khi thèm viết ra để người khác hiểu mình đang thiết kế thế nào. Vì thế trong một số trường hợp đụng phải cái kiểu chẳng có tiêu chuẩn gì hết cả, ai thích làm sao thì làm. Ông A thì chửi ông B chẳng chịu giải thích cái mình làm gì hết. Lúc sau lại đến ông C chửi lại ông A.

            Nếu tớ không nhầm thì chính phủ, và bộ quốc phòng Nga còn có ý định mua thiết bị quân sự của nước ngoài thay vì của Nga vì bây giờ bọn họ bán dầu cũng có tiền mà hàng Nga thì quá lởm. Cho dù mọi người có tung hô hàng Nga thế nào chăng nữa thì tớ thấy ngay cả hàng hóa dân sự mà Nga còn làm quá lởm thì làm sao những thứ cao cấp như quân sự của Nga lại tốt cho được. Trong lúc Boeing, Airbus sản xuất máy bay cho toàn thế giới với chất lượng cao thì Nga có chủ Antonov lâu lâu lại rơi vài cái. Vậy thì mấy cái Su Mig của Nga mà so với F của mẽo hay Eurofighter thì có khác gì mấy.

            Tớ biết rằng hầu hết các bạn đều nói con người là quan trọng, rồi mới đến vũ khí. Cái này tớ không thể không đồng ý. Nhưng nói về công nghệ thì tớ vẫy khoái bọn tư bản nhất.

            Comment


            • #96
              oái oái ! Bác đừng hiểu nhầm em thế! Em không khen mấy cái không tiêu chuẩn đó đâu ! Chẳng cần đi làm,chỉ cần là sinh viên thì đã thấy khó chịu đó cái đó rồi. Làm việc với những cái module thì bao giờ chẳng sướng.Nhưng quân sự là quân sự mà!
              Còn cái chuyện nhiễu mà bác nói đó thì bọn em đã lường trước hết rồi,cũng có hẳn chuyên môn ngâm cứu về cái đó mà. Có rất nhiều loại nhiễu như nhiễu đồng bộ (bác vừa đề cập đó),nhiễu ngắm...Và tất nhiên là nếu có nhiễu thì sẽ có chống nhiễu.B52 của mĩ nó còn chơi ác ấy chứ.Thế mà vẫn rụng ầm ầm !
              Bác đừng nói mấy anh Nga ngố nhà mình ngu thía chứ.Họ rấ giỏi toán đồng nghĩa với triển vọng rất cao trong việc sản suất tên lửa.Cái này thì Việt Nam đang cần đó !
              Xét về công nghệ thì tu bản đúng là ngon thật,và cũng đúng là Nga mua nhiều hàng của họ nhất là các sản phẩm công nghệ nhưng đó không phải là sản phẩm cuối cùng. Rút ngắn công đoạn sản xuất bằng các công ty ngoài là rất tốt. Lợi dụng các cơ chế về trang thiết bị quân sự của các nước mà dặt hàng thì tốt quá rồi.Thiết nghĩ việt nam mà theo hướng này cũng được. Các triển lãm quân sự đưa ra là sự cạnh tranh tốt cho công nghệ và việc ứng dụng công nghệ trong việc phát triển cuộc sống của con người!
              Nhưng mà thôi,nói mãi thì dài lắm.Mỗi người một quan điểm mà. Bác Rommel.de hẳn là người hiểu biết nhiều về ASIC,thiết nghĩ với sinh viên thì những vấn đề này còn chút bỡ ngỡ.Nếu thấy tâm huyết về đất nước thì có lẽ bác ủng hộ anh em bằng một topic ra trò? Em là sinh viên năm cuối,cũng sắp ra trường nên cũng muốn củng có chút kiến thức ít ỏi.Hi vọng được theo dõi các đàn anh cái cách đặt và giải quyết vấn đề.

              Quay trở lại một đề tài một chút, trong các xung mà anh MTAPIC cần tạo có xung đồng bộ.Theo e được biết thì tín hiệu cao tần trước khi bức xạ vào không gian nó đi qua hệ thống ănten+ phi đe.Nhưng đoạn ống dẫn sóng không quá dài.Việc tiếp điên và phối hợp trở kháng cũng có chút khó khăn. Vậy tín hiệu sẽ truyền đi như thế nào nếu như không truyền bằng phide như bạn hithere123 nói?

              Comment


              • #97
                Nguyên văn bởi yakhontvn Xem bài viết
                Quay trở lại một đề tài một chút, trong các xung mà anh MTAPIC cần tạo có xung đồng bộ.Theo e được biết thì tín hiệu cao tần trước khi bức xạ vào không gian nó đi qua hệ thống ănten+ phi đe.Nhưng đoạn ống dẫn sóng không quá dài.Việc tiếp điên và phối hợp trở kháng cũng có chút khó khăn. Vậy tín hiệu sẽ truyền đi như thế nào nếu như không truyền bằng phide như bạn hithere123 nói?
                Chẳng phải bạn Hithere123 đã nói rồi hay sao, dùng cáp quang để truyền đi, ở 2 đầu có phần chuyển đổi quang điện, ở đầu cuối có phần khuếch đại công suất. Tín hiệu radar của bạn thì truyền đi bằng feeder được vì nó là tín hiệu đơn tần (CW) băng thông rất hẹp. Tín hiệu xung là tín hiệu băng thông rộng truyền đi bằng feeder là không được rồi. Ngoài ra tin hiệu điện truyền đi xa những 200m thì chắc suy hao hết, và xung điện sẽ bị trải rộng ra do giới hạn về băng thông. Cái này thì tín hiệu quang lại làm tốt hơn.

                Comment


                • #98
                  Còn có ai có ý kiến khác không ạ? Anh MTAPIC đâu rồi ? Cáp bên anh truyền bằng loại gì nhỉ?

                  Comment


                  • #99
                    Chào bạn MTAPIC,

                    Chắc bạn đã có phương án tạo xung bằng PFGA rồi, mình đưa lên kết quả mô phỏng giải pháp của mình đề bạn so sánh. Mình sử dụng SystemC để viết code và mô phỏng.
                    Mình tham khảo trang này đề làm :
                    http://www.ht-lab.com/howto/vh2sc_tut/vh2sc_tut.html

                    Mã cho phần tạo xung:
                    Code:
                    //------------------------------------------------------------------
                    //-- http://www.dientuvietnam.net
                    //-- Vi Dien Tu: Thiet ke, Phat trien va Ung dung
                    //-- GAL-PAL-CPLD-FPGA
                    //-- FPGA va cac giai phap ung dung trong Cong Nghe Quan Su
                    //--
                    //-- MODULE name	:  sync_pulse_gen
                    //-- Created by	:  hithere123
                    //--
                    //-- function	:  Tao xung dong bo cu ly 
                    //--     
                    //-- Copyright 2011 -  All rights reserved.
                    //------------------------------------------------------------------
                    //-- Revisions  :
                    //-- Date         Version  Author    	Description
                    //-- 2011-07-14   0.1      hithere123	created
                    //--
                    //------------------------------------------------------------------
                    
                    #ifndef SYNC_PULSE_GEN_H
                    #define SYNC_PULSE_GEN_H
                    
                    #include <systemc.h>
                    
                    SC_MODULE(sync_pulse_gen) {
                    
                        sc_in<bool >  mclk_i;
                        sc_in<sc_logic >  sync_en_i;
                        sc_out<sc_logic > sync_clk1_o;
                        sc_out<sc_logic > sync_clk2_o;
                        sc_out<sc_logic > sync_clk3_o;
                        sc_out<sc_logic > sync_clk4_o;
                        sc_out<sc_logic > sync_clk5_o;	
                    
                        sc_signal<sc_lv<10> > count_int;
                    
                        void counter() {
                           if ((sync_en_i.read() == SC_LOGIC_0)) {
                                count_int.write(0);
                            } else if (mclk_i.posedge()) {
                                    count_int.write((count_int.read().to_uint() + 1)); 
                            }
                        }
                    	
                    	void comp() {
                           if ((sync_en_i.read() == SC_LOGIC_0)) {
                                sync_clk1_o.write(SC_LOGIC_0);
                                sync_clk2_o.write(SC_LOGIC_0);
                                sync_clk3_o.write(SC_LOGIC_0);
                                sync_clk4_o.write(SC_LOGIC_0);
                                sync_clk5_o.write(SC_LOGIC_0);			
                            } else {
                    		    if (count_int.read().to_uint() == 0) {			
                    				sync_clk1_o.write(SC_LOGIC_1);
                    		    } else if ((count_int.read().to_uint() == 170) && (mclk_i.negedge())) {
                    				sync_clk2_o.write(SC_LOGIC_1);
                    			} else if ((count_int.read().to_uint() == 255) && (mclk_i.negedge())) {
                    				sync_clk3_o.write(SC_LOGIC_1);
                    				sync_clk4_o.write(SC_LOGIC_1);
                    			} else if ((count_int.read().to_uint() == 281) && (mclk_i.negedge())) {
                    				sync_clk3_o.write(SC_LOGIC_0);
                    			} else if ((count_int.read().to_uint() == 310) && (mclk_i.negedge())) {
                    				sync_clk2_o.write(SC_LOGIC_0);
                    			} else if ((count_int.read().to_uint() == 395) && (mclk_i.negedge())) {
                    				sync_clk4_o.write(SC_LOGIC_0);
                    			} else if ((count_int.read().to_uint() == 400) && (mclk_i.negedge())) {
                    				sync_clk1_o.write(SC_LOGIC_0);
                    			} else if ((count_int.read().to_uint() == 470) && (mclk_i.negedge())) {
                    				sync_clk5_o.write(SC_LOGIC_1);
                    			} else if ((count_int.read().to_uint() == 610) && (mclk_i.negedge())) {
                    				sync_clk5_o.write(SC_LOGIC_0);
                    			}	
                            }
                        } 
                    
                        SC_CTOR(sync_pulse_gen) {
                            SC_METHOD(counter);
                            sensitive << mclk_i << sync_en_i;
                            SC_METHOD(comp);
                            sensitive << mclk_i << sync_en_i << count_int;		
                        }
                    
                    };
                    #endif
                    Mã cho phần mô phỏng:

                    Code:
                    //------------------------------------------------------------------
                    //-- http://www.dientuvietnam.net
                    //-- Vi Dien Tu: Thiet ke, Phat trien va Ung dung
                    //-- GAL-PAL-CPLD-FPGA
                    //-- FPGA va cac giai phap ung dung trong Cong Nghe Quan Su
                    //--
                    //-- MODULE name	:  sc_main
                    //-- Created by		:  hithere123
                    //--
                    //-- function		:  test_bench 
                    //--     
                    //-- Copyright 2011 -  All rights reserved.
                    //------------------------------------------------------------------
                    //-- Revisions  :
                    //-- Date         Version  Author    	Description
                    //-- 2011-07-14   0.1      hithere123	created
                    //--
                    //------------------------------------------------------------------
                    #include <systemc.h>
                    #include "sync_pulse_gen.h"
                    
                    int sc_main(int argc, char* argv[])
                    {
                    	
                    	sc_signal<sc_logic > en, clk1,clk2,clk3,clk4,clk5,;
                        sc_signal<sc_lv<10> > cnt;
                    
                        sc_clock clk("clk",10,SC_NS,0.5,10,SC_NS,false);    	
                     
                     sync_pulse_gen DUT("sync_pulse_gen");               		
                    
                        DUT.mclk_i(clk);
                        DUT.sync_en_i(en);
                        DUT.sync_clk1_o(clk1);
                        DUT.sync_clk2_o(clk2);
                        DUT.sync_clk3_o(clk3);
                        DUT.sync_clk4_o(clk4);
                        DUT.sync_clk5_o(clk5);
                    
                        sc_trace_file *fp;                  
                        fp=sc_create_vcd_trace_file("wave");
                        fp->set_time_unit(100, SC_PS);      
                        sc_trace(fp,clk,"clk");            
                        sc_trace(fp,en,"en");
                        sc_trace(fp,clk1,"clk1");
                        sc_trace(fp,clk2,"clk2");
                        sc_trace(fp,clk3,"clk3");
                        sc_trace(fp,clk4,"clk4");
                        sc_trace(fp,clk5,"clk5");
                        sc_trace(fp,DUT.count_int,"cnt");	
                    
                        en = SC_LOGIC_0;
                        sc_start(100, SC_NS);                
                    	en = SC_LOGIC_1;
                        sc_start(10000, SC_NS);                
                    	en = SC_LOGIC_0;
                        sc_start(240000, SC_NS);                
                    	en = SC_LOGIC_1;
                        sc_start(10000, SC_NS);               
                    	en = SC_LOGIC_0;
                        sc_start(240000, SC_NS);                	
                        sc_close_vcd_trace_file(fp);        
                    
                        return 0;
                    }
                    Make file:

                    Code:
                    #--------------------------------------------------------
                    # Simple Makefile
                    # Note header files are not checked if updated!
                    #--------------------------------------------------------
                    
                    # Specify all source and header files
                    SRCS = sc_main.cpp
                    SRCH = sync_pulse_gen.h
                    
                    # Target file run.exe
                    TARGET = run
                    
                    # Variable that points to SystemC installation path
                    SYSTEMC = /usr/local/systemc-2.2
                    
                    INCDIR = -I. -I.. -I$(SYSTEMC)/include
                    LIBDIR = -L. -L.. -L$(SYSTEMC)/lib-cygwin
                    LIBS   = -lsystemc -lm
                    
                    CC     = g++
                    CFLAGS = -g -Wno-deprecated -Wall
                    OBJS   = $(SRCS:.cpp=.o)
                    
                    EXE    = $(TARGET).exe
                    
                    .SUFFIXES: .cpp .o   
                    
                    all: $(EXE)	
                    
                    $(EXE): $(OBJS)  
                    	$(CC) $(INCDIR) $(LIBDIR) -o $@ $(OBJS) $(LIBS) 2>&1 | c++filt
                    	
                    .cpp.o:   	
                    	$(CC) $(CFLAGS) $(INCDIR) -c $<
                    
                    clean:
                    	rm -f $(OBJS) *~ $(EXE) *.bak $(TARGET).exe.stackdump
                    Đây là một vài hình chụp mô phỏng:





                    Bạn có thể xem chi tiết hơn ở file wave.vcd đính kèm.

                    Mình có một vài giải thích cho đoạn mã trên:
                    - Đoạn mã trên đơn thuần là mô phỏng ý tưởng, không thể là mã tối ưu được
                    - Dùng 10 bit cho bộ đếm mà không dùng int là vì muốn giới hạn tài nguyên phần cứng
                    - Dùng sườn xuống trong phần so sánh (comp) với mục đích có thể điều chỉnh độ chính xác tới +/- 1/2 chu kỳ xung.
                    - Dùng tín hiệu sync_en_i như là một tín hiệu enable còn có mục đích làm calibration sau này để chính xác hơn về mặt thời gian. Nếu có bạn nào hứng thú với phần calibration này thì mình sẽ trao đổi thêm.

                    Ngoài ra, mình thấy FPGA có thể làm calibration được nên phần sai số hệ thống (systematic) như mình phân tích ở bài viết trước là có thể giải quyết được, tuy nhiên sai số ngẫu nhiên (random) thì thực sự là vấn đề đấy nếu trong giải pháp của bạn vẫn layout phần khuếch đại xung và PFGA chung một board (hoặc chung đường đất (gnd). Nếu các bạn hứng thú thì mình sẽ trao đổi tiếp vấn đề này.

                    Thấn mến
                    P/S: à nếu bác Tony vào nhìn code SystemC của em thì cũng đừng chê cười nhé, em không chuyên về coding đâu
                    Attached Files

                    Comment


                    • Chào bạn Hithere123,

                      Bạn có thể giải thích rõ hơn về tín hiệu calibration của bạn được không. Thật ra lúc trước tớ không có đồng ý với bạn dùng tín hiệu này lắm. Tín hiệu này theo như tớ hiểu thì nó không đồng bộ với đồng hồ của fpga. Như vậy liệu có thể xảy ra metastability không? Tớ thì vẫn nghĩ rằng cách tốt nhất là dùng một tín hiệu đồng hồ chuẩn đưa vào fpga. Bên trong fpga dùng pll nhân tần tín hiệu này lên làm tín hiệu đồng hồ của toàn mạch. Nếu như tín hiệu đồng hồ bạn cấp cho fpga ổn định, hệ số nhân tần không quá lớn thì pll bên trong fpga đủ sức khóa pha không bị trượt chu kỳ đâu.

                      Tớ cũng có góp ý một chút với đoạn code của bạn. Như tớ đã có nói. chu kì xung, độ rộng xung, và độ trễ không nên fix cứng trong code (bạn đã fix cứng giá trị như 170, 255, 281...). Các giá trị này nên được đưa vào từ mode register. Giá trị của mode register có thể được thay đổi từ bên ngoài. Làm như vậy thì mạch của bạn mới linh hoạt và có thể sửa lại theo các trường hợp khác nhau (ví dụ như thay đổi tần số đồng hồ). Mặc dù fpga có thể lập trình lại dễ dàng khác hẳn với ASIC, nhưng tớ nghĩ việc làm cho mạch có tính linh hoạt không những có thể tránh việc sửa lại code khi thay đổi ý hoặc điều kiện ban đầu mà còn là một thói quen tốt của người làm thiết kế. Ngoài ta tớ nghĩ nên thêm một lệnh điều khiển có tạo xung hay không tạo xung để nếu cần thì ta có thể tắt các xung này từ bên ngoài (thông qua khối controller). Cái này có thể giúp đồng bộ hoạt động của khối tạo xung với các phần tính toán khác và đâu phải lúc nào ta cũng muốn xung chạy ầm ầm đúng không?

                      Comment


                      • Chào bạn Rommel.de,

                        Hoàn toàn nhất trí với bạn về điểm này:

                        Nguyên văn bởi Rommel.de Xem bài viết
                        Tớ cũng có góp ý một chút với đoạn code của bạn. Như tớ đã có nói. chu kì xung, độ rộng xung, và độ trễ không nên fix cứng trong code (bạn đã fix cứng giá trị như 170, 255, 281...). Các giá trị này nên được đưa vào từ mode register. Giá trị của mode register có thể được thay đổi từ bên ngoài. Làm như vậy thì mạch của bạn mới linh hoạt và có thể sửa lại theo các trường hợp khác nhau (ví dụ như thay đổi tần số đồng hồ). Mặc dù fpga có thể lập trình lại dễ dàng khác hẳn với ASIC, nhưng tớ nghĩ việc làm cho mạch có tính linh hoạt không những có thể tránh việc sửa lại code khi thay đổi ý hoặc điều kiện ban đầu mà còn là một thói quen tốt của người làm thiết kế. Ngoài ta tớ nghĩ nên thêm một lệnh điều khiển có tạo xung hay không tạo xung để nếu cần thì ta có thể tắt các xung này từ bên ngoài (thông qua khối controller). Cái này có thể giúp đồng bộ hoạt động của khối tạo xung với các phần tính toán khác và đâu phải lúc nào ta cũng muốn xung chạy ầm ầm đúng không?
                        Như mình đã đề cập, đấy chỉ là một đoạn mã minh họa cho giải pháp của mình thôi, nó hoàn toàn chưa được tối ưu.

                        Về vấn đề này:

                        Nguyên văn bởi Rommel.de Xem bài viết
                        Bạn có thể giải thích rõ hơn về tín hiệu calibration của bạn được không. Thật ra lúc trước tớ không có đồng ý với bạn dùng tín hiệu này lắm. Tín hiệu này theo như tớ hiểu thì nó không đồng bộ với đồng hồ của fpga. Như vậy liệu có thể xảy ra metastability không? Tớ thì vẫn nghĩ rằng cách tốt nhất là dùng một tín hiệu đồng hồ chuẩn đưa vào fpga. Bên trong fpga dùng pll nhân tần tín hiệu này lên làm tín hiệu đồng hồ của toàn mạch. Nếu như tín hiệu đồng hồ bạn cấp cho fpga ổn định, hệ số nhân tần không quá lớn thì pll bên trong fpga đủ sức khóa pha không bị trượt chu kỳ đâu.?
                        Mình cũng hy vọng là các bạn đang làm dự án này sẽ phản biện như bạn

                        Đây là tín hiệu mình đưa thêm để giải quyết sai số hệ thống của tín hiệu đồng hồ bên trong FPGA. Giả sử chu kỳ tín hiệu đồng hồ có sai số 2% chẳng hạn thì độ rộng xung 4us sẽ bị sai 80ns, tương tự với chu kỳ 250us sẽ bị sai 5us. Để đạt được độ chính xác 20ns cho độ rộng xung 4us thì với phương pháp dùng bộ đếm này, chu kỳ xung đồng hồ của FPGA phải đạt được độ chính xác 0.5%. Chắc bạn cũng như mình, con số 0.5% này không hề đơn giản chút nào.

                        Mình đưa ra giải pháp calibration là để giải quyết anh 2% này. Kịch bản sẽ như sau:
                        [1] Phần tạo xung bằng FPGA sẽ có hai chế độ:
                        - Chế độ calibration ngay sau khi bật nguồn (tương tự như bước hiệu chình khi dùng máy đo)
                        - Chế độ hoạt động bình thường (hoạt động như chương trình minh họa ở trên)
                        [2] Chế độ calibration:
                        - Dùng một tín hiệu xung chuẩn từ ngoài (ví dụ 10us chẳng hạn) đưa vào chân sync_en_i
                        - Bằng một flip-flop chạy bằng xung đồng hồ của PFGA có thể đồng bộ tín hiệu ở sync_en_i với xung đồng hồ của FPGA và sai số ở bước này lớn nhất bằng chu kỳ của một xung đồng hồ của PFGA. Đây chính là lý do mình nói có thể tăng độ chính xác bằng cách tăng tần số xung đồng hồ.
                        - Cho bộ đếm hoạt động trong một chu kỳ 10us chuẩn của sync_en_i --> ghi lại giá trị của bộ đếm.
                        - Từ giá trị của bộ đếm này sẽ tính toán chính xác thành các giá trị so sánh N1, N2, ... và ghi vào thanh ghi như bạn nói.
                        Bằng cách này thì có thể nói gần đúng sai số xung tạo ra của chúng ta chỉ phụ thuộc vào xung chuẩn bên ngoài và ~2 chu kỳ của xung đồng hồ FPGA.

                        Nếu có bạn sinh viên nào hứng thú với SystemC hoặc có board FPGA rồi thì mình có thể cùng làm thử phần Calibration này và test thử xem nó có chạy không?

                        Thân mến,

                        Comment


                        • Chào bạn Hithere123,

                          Bây giờ thì tớ hiểu ý của bạn về calibration rồi. Bạn làm như vậy cũng được nhưng đó không phải là cách mà mọi người thường dùng trong ngành công nghiệp đâu. Nhân tiện nhắc đến chuyện căn chỉnh tần số để tớ giới thiệu một chút với các bạn về vấn đề này.

                          Đối với mạch số thuần túy thì người ta không đặt nặng chuyện căn chỉnh chính xác tần số đồng hồ mà chỉ cần đồng bộ là đủ. Ví dụ như đồng hồ cấp ra tín hiệu 10 MHz, hay 10.1 MHz cũng không hẳn đã quá quan trọng. Ngoài ra tín hiệu đồng hồ của mạch số thường bị điều chế, kỹ thuật này gọi là trải phổ. Nếu như tín hiệu đồng hồ của mạch số chỉ là 1 tần số duy nhất thì nhiễu do mạch số phát ra ở tần số này sẽ rất lớn làm ảnh hưởng đến các thiết bị xung quanh. Vì vậy người ta điều chế tín hiệu đồng hồ cơ bản để tần số của nó giao động một cách chậm rãi quanh tần số chính. Điều này làm cho nhiễu do mạch số phát ra bị trải rộng trên một khoảng tần số và phổ không còn mạnh như trước nữa.

                          Những một số trường hợp người ta cần tần số chính xác ví dụ điện thoại di động của các bạn phải thu phát chính xác tần số không thể bị lệch ra ngoài được. Để làm cái này người ta dùng mạch DCXO (Digitally Compensated Crystal Oscillator). Nguyên tắc của việc căn chỉnh này không phải là dùng một xung chuẩn để căn chỉnh lại mà mạch của bạn phát tín hiệu ở một tần số xác định nào đó. Người ta dùng máy phân tích phổ xác định tần số thật sự do mạch bạn phát ra để xác định tần số bị lệch, rồi sau đó mạch bạn sẽ đóng hoặc ngắt các switch nối các tụ (các tụ này nằm bên trong chip) với phần crystal bên ngoài. Điều này sẽ làm cho tần số dao động của mạch tăng lên hoặc giảm đi.

                          Đối với việc để làm chính xác thời gian như bạn Hithere123 đề cập tớ cũng đưa ra một giải pháp ở đây. Cái này trong ngành công nghiệp cũng dùng khá nhiều. Bạn có thể dùng một máy phát tín hiệu của Agilent hoặc Rohde & Schwaz để làm tín hiệu đồng hồ chuẩn. Các máy phát này thường đã được căn chỉnh trước khi bán khá tốt rồi. Trong trường hợp bạn sử dụng trạm tên lửa vài năm và muốn căn chỉnh lại tần số thì chỉ việc đem máy phát đến cho đại diện công ty căn chỉnh lại là xong. Những loại này có harmonic rất nhỏ, ngoài ra bạn cũng không cần tần số quá cao nên giá cũng rẻ có loại chắc chưa đến 10,000 USD (đây thật sự là giá quá bèo đối với các thiết bị trong ngành công nghiệp). Khi bạn dùng máy phát tín hiệu thay thế cho mạch dao động thì có một số điểm cần lưu ý. Thường máy phát tín hiệu này có một chân là tín hiệu một chân là đất. Chân đất thì bạn phải nối thẳng xuống đất của mạch còn chân tín hiệu thì không nên đưa thẳng vào chip. Trước hết bạn nên dùng một transformer để chuyển tín hiệu dao động từ dạng single ended sang differential, từ 2 đầu ra differential của transformer bạn thêm vào 2 tụ điện dung lớn để loại bỏ thành phần 1 chiều (transformer là cuộn dây nên thành phần 1 chiều lúc nào cũng cùng giá trị điện áp không thể đưa thẳng vào chip được. Cuối cùng tín hiệu cao tần đi qua 2 tụ trên rồi vào chip làm tín hiệu đồng hồ.

                          Comment


                          • Chào bạn Rommel.de,

                            Mình hiểu ý bạn là nếu cần thêm một xung hiệu chỉnh ngoài như mình thì dùng luôn cái máy phát xung đấy chứ làm FPGA làm gì nữa cho mệt. Đồng ý với bạn là với tầm 10K là có được máy phát xung đảm bảo ngon lành cành đào với bài toán các bạn ấy đưa ra.

                            Tuy nhiên giải pháp của mình đưa lên chỉ là một giải pháp tham khảo nếu dùng FPGA vì như bạn MTAPIC đã nói các bạn đấy đã làm rồi nhưng "đang trăn trở" liệu giải pháp của các bạn có vấn đề gì không? Mình cũng rất muốn biết giải pháp dùng FPGA của các bạn đấy có gặp vấn đề về sai số của xung đồng hồ không.

                            Phần thứ hai các bạn ấy băn khoăn là phần khuếch đại xung với yêu cầu cao về sườn. Cái này mới chính là cái mình muốn bàn nhưng các câu hỏi của mình về độ dốc dường như là những quan tâm "tiểu tiết". Vì vậy mình đưa thử một giải pháp dùng FPGA tạo xung để có thể kết thúc thảo luận phần tạo xung bằng FPGA. Sau đó mình muốn quay lại với mấy cái "tiểu tiết" đấy. Giải pháp mình đang nghĩ là push-pull có thể khả thi.

                            Phần thứ 3 là truyền xung, nhưng có lẽ cái này để sau vì theo như mình thấy dự án các bạn đấy đang làm có vẻ chưa phát triển tới phần này, hoặc phần này đã có người khác lo.

                            Nếu bạn MTAPIC hoặc mọi người không có thảo luận về FPGA nữa thì mình chuyển sang phần khuếch đại nhỉ?

                            Thân mến,

                            Comment


                            • P/S: à nếu bác Tony vào nhìn code SystemC của em thì cũng đừng chê cười nhé, em không chuyên về coding đâu
                              @hithere123, không dám cười đâu mà còn ngặc nhiên và hứng thú nữa là đã có thêm người hưởng ứng theo kỹ thuật sáng chế mới mẻ này. Tôi có 2 đề nghị

                              1) Đổi sensitivity tới mclk_i.pos() để chạy đồng bộ
                              Code:
                                  SC_CTOR(sync_pulse_gen) {
                                      SC_METHOD(counter);
                                      sensitive << mclk_i.pos();
                                      SC_METHOD(comp);
                                      sensitive << mclk_i.pos();		
                                  }
                              và bạn có thể bỏ những code có liên hệ tới mclk_i trong hàm counter và comp.

                              2) Thêm reset. Nếu async thì thêm vô sensitivity list
                              sensitive << mclk_i.pos() << reset.pos(); // Cho active high reset

                              Bạn sửa lại code rồi mình trao đổi thêm. Sau khi code đã chỉnh, tôi sẽ tổng hợp ra RTL cho mọi người tham khảo thêm
                              Chúc một ngày vui vẻ
                              Tony
                              email : dientu_vip@yahoo.com

                              Comment


                              • Nguyên văn bởi hithere123 Xem bài viết
                                Chào bạn Rommel.de,

                                Mình hiểu ý bạn là nếu cần thêm một xung hiệu chỉnh ngoài như mình thì dùng luôn cái máy phát xung đấy chứ làm FPGA làm gì nữa cho mệt. Đồng ý với bạn là với tầm 10K là có được máy phát xung đảm bảo ngon lành cành đào với bài toán các bạn ấy đưa ra.

                                Tuy nhiên giải pháp của mình đưa lên chỉ là một giải pháp tham khảo nếu dùng FPGA vì như bạn MTAPIC đã nói các bạn đấy đã làm rồi nhưng "đang trăn trở" liệu giải pháp của các bạn có vấn đề gì không? Mình cũng rất muốn biết giải pháp dùng FPGA của các bạn đấy có gặp vấn đề về sai số của xung đồng hồ không.

                                Phần thứ hai các bạn ấy băn khoăn là phần khuếch đại xung với yêu cầu cao về sườn. Cái này mới chính là cái mình muốn bàn nhưng các câu hỏi của mình về độ dốc dường như là những quan tâm "tiểu tiết". Vì vậy mình đưa thử một giải pháp dùng FPGA tạo xung để có thể kết thúc thảo luận phần tạo xung bằng FPGA. Sau đó mình muốn quay lại với mấy cái "tiểu tiết" đấy. Giải pháp mình đang nghĩ là push-pull có thể khả thi.

                                Phần thứ 3 là truyền xung, nhưng có lẽ cái này để sau vì theo như mình thấy dự án các bạn đấy đang làm có vẻ chưa phát triển tới phần này, hoặc phần này đã có người khác lo.

                                Nếu bạn MTAPIC hoặc mọi người không có thảo luận về FPGA nữa thì mình chuyển sang phần khuếch đại nhỉ?

                                Thân mến,
                                Chào bạn Hithere123,

                                Tớ nghĩ có một điểm tớ cần làm rõ hơn. Lúc trước tớ có nói đến máy phát tín hiệu giá dưới 10K. Cái máy đó chỉ dùng để phát tín hiệu sine ở một tần số xác định dùng làm tín hiệu đồng hồ để đưa vào trong fpga mà thôi. Sở dĩ ta dùng nó thay vì mạch giao động khác (chỉ là mạch giao động tạo tín hiệu đồng hồ chứ chưa tạo xung) vì nó được căn chỉnh tốt. Nếu như bạn muốn dùng máy phát tín hiệu xung ở mức độ chính xác cao thì ít nhất cũng phải dùng loại vector generator có giá vài chục ngàn. Tớ nghĩ cái này không cần thiết và không hay lắm vì ngoài việc tạo xung ra ta cũng phải tính toán rất nhiều bên trong radar. Cái này nên nhét chung vào trong fpga vì nó có tín hiệu đồng bộ sẵn bên trong rồi.

                                Về việc truyền xung đi tớ hoàn toàn đồng ý với bạn dùng cáp quang. Về phần công suất tớ chưa hiểu ý bạn về push-pull là như thế nào vì nếu tớ không nhầm thì push-pull là dùng để khuếch đại tín hiệu tương tự (ví dụ như tín hiệu sine). Đối với việc tạo xung vuông như vậy thì trong ASIC người ta dùng mạch level shifter, tiếp sau là một mạch tương tự như inverter mà thôi.

                                Tớ nghĩ phần đáng để bàn nhất là phần xử lý tín hiệu của radar. Cái này tớ đề nghị nhập chung vào trong fpga tạo xung. Phần controller, mode register, và phần điều khiển của máy tính bên ngoài nên làm việc với toàn bộ các khối.

                                Comment

                                Về tác giả

                                Collapse

                                MTAPIC Tìm hiểu thêm về MTAPIC

                                Bài viết mới nhất

                                Collapse

                                Đang tải...
                                X