RP Store Tìm linh kiện theo mã, gửi BOM nhận báo giá Gửi BOM

[PSOC] Beginner

Collapse
X
 
  • Giờ
  • Show
Clear All
new posts

  • it4rb
    replied
    Nguyên văn bởi phuongdua Xem bài viết
    _ 1 câu nữa nhé. Sử dụng thư viện stdio thì cần phải có STDOUT device, nhưng ko rõ STDOUT device vd là cái gì ?
    STDOUT là bất cứ device nào hiển thị được và có driver hỗ trợ của altera. Ví dụ như tiêu biểu hay dùng là uart, hoặc có thể port lại thành lcd (chưa thử). Khi đã biết STDOUT là device nào thì NiosIDE sẽ chuyển các câu lệnh printf...thành các hàm tương ứgn để hiển thị lên device đó.
    Nếu trong project SOPC của bạn có nhiều thiết bị hiển thị được hỗ trợ thì bạn có thể thiết lập cái nào là stdout bằng cách chọn properties của project/AssociatedSystemLibrary/SystemLibraryProperties/stdout rồi select device. Tương tự cho stdin (dùng để nhập liệu) và stderr (dùng để xuất thông báo lỗi chuẩn).

    Leave a comment:


  • tonyvandinh
    replied
    So sánh giữa mã nguồn C và RTL

    Cám ơn bạn Jeff đã bỏ công để mô tả cùng một hoạt động nhưng ở dạng RTL. Bây giờ các bạn đã thấy cả hai cách mô tả, cách nào các bạn thấy dễ làm và hiểu hơn. Xin các bạn cho ý kiến. Cám ơn các bạn.

    Tony

    Leave a comment:


  • jefflieu
    replied
    Cho bạn thêm cái code viết bằng VHDL, ngâm cứu đi
    ---------------------------
    entity string_search is
    generic(STRING_LEN: integer :=32);
    Port ( string_in : in STD_LOGIC_VECTOR (STRING_LEN-1 downto 0);
    clk : in STD_LOGIC;
    rst : in std_logic;
    num_ones : out STD_LOGIC_VECTOR(7 downto 0));
    end string_search;

    architecture Behavioral of string_search is
    type my_ram is array (0 to STRING_LEN-1) of std_logic_vector(7 downto 0);
    signal result: my_ram;
    signal all_ones: std_logic_vector(STRING_LEN-1 downto 0):=(others=>'1');

    begin
    loop1: for I in 0 to STRING_LEN-1 generate
    process(clk,rst)
    begin
    if(rst='1') then
    result(I) <= (others=>'0');
    elsif(rising_edge(clk)) then
    if(string_in(I)='1') then
    for J in I to STRING_LEN-1 loop
    if(string_in(J downto I)=all_ones(J downto I)) then result(I)<=conv_std_logic_vector(J-I+1,8); end if;
    end loop;
    end if;
    end if;
    end process;
    end generate;

    process(clk,rst)
    variable max: std_logic_vector(7 downto 0):=(others=>'0');
    begin
    if(rst='1') then
    max := (others=>'0');
    elsif(rising_edge(clk)) then
    max := (others=>'0');
    loop2: for K in 0 to STRING_LEN-1 loop
    if(result(K)>max) then max:=result(K); end if;
    end loop;
    num_ones<=max;
    end if;
    end process;
    end Behavioral;

    Leave a comment:


  • tonyvandinh
    replied
    Nguyên văn bởi phuongdua Xem bài viết
    hi, mình đã viết code cho bài này, vì mình định làm bằng 2 cách viết ( thêm cách của bạn tony), mà cách của bạn tony chắc đúng rồi, nên mình viết thử cách bình thường trước, nhưng nó lại báo lỗi "type conflict"


    -------------------------
    ý, mình bik tại sao rồi, lẽ ra phải để hàm Counter trước, hì, lỗi sơ đẳng mà cũng sai, ngại quá
    Chúc mừng bạn đã hiểu và giải quyết được vấn đề. Bạn có thể đem phần "main" qua bài khác và dùng bài đầu (header file) để giữ chỗ cho Counter.

    Code:
    // testbench.c
    unsigned char Counter( unsigned int test_num);
    int main()
    {
      unsigned int test_num = 232;
      unsigned char num_1s = Counter(test_num);
      return 0;
    }
    Code:
    // Counter.c
    unsigned char Counter( unsigned int test_num)
    {
      unsigned char count = 0;
      unsigned int temp = test_num;
      unsigned char max = 0;
      while (temp >0)
      {
        if((temp %2)==1)
          count ++;
        else
        {
          if(count > max)
             max = count;
          count = 0;
        }
        temp = temp >> 1;
      }
      return max;
    }

    Leave a comment:


  • tonyvandinh
    replied
    Nguyên văn bởi phuongdua Xem bài viết
    Cho mình hỏi, nếu type trên có thể can thiệp từng bit thì ko bik mình có thể sửa code lại thành sc_uint<5> dc ko? vì mình thấy số lượng tối đa số 1 trong 1 số 20 bit thì dùng 5 bit để diễn tả cũng ok rồi.
    Đúng, bạn có thể dùng 5 bits vì số đếm liên tục của 1 không thể lớn hơn 20.

    Nguyên văn bởi phuongdua Xem bài viết
    Và mình có thể sử dụng cấu trúc này cho Nios II IDE bình thường chứ? hay có cần khai báo thêm gì ko?
    Tôi không rành về Nios II IDE lắm. Nhưng hình như là nó dựa vào Eclipse IDE thì chắc là sẽ dùng "gcc" để compile. Nhưng tôi không biết phần C to RTL của Altera có thể tổng hợp được systemC datatype (chắc là không vì những ví dụ toàn dùng C native datatype)

    Nguyên văn bởi phuongdua Xem bài viết
    _ 1 câu nữa nhé. Sử dụng thư viện stdio thì cần phải có STDOUT device, nhưng ko rõ STDOUT device vd là cái gì ?
    Tôi nghĩ Nios II IDE hỗ trợ cho stdout. Nếu không thì phần kiểm duyệt hơi phức tạp :-)

    Chào
    Tony

    Leave a comment:


  • phuongdua
    replied
    hi, mình đã viết code cho bài này, vì mình định làm bằng 2 cách viết ( thêm cách của bạn tony), mà cách của bạn tony chắc đúng rồi, nên mình viết thử cách bình thường trước, nhưng nó lại báo lỗi "type conflict"
    int main()
    {
    unsigned int test_num = 232;
    unsigned char num_1s = Counter(test_num);
    return 0;
    }

    unsigned char Counter( unsigned int test_num)
    {
    unsigned char count = 0;
    unsigned int temp = test_num;
    unsigned char max = 0;
    while (temp >0)
    {
    if((temp %2)==1)
    count ++;
    else
    {
    if(count > max)
    max = count;
    count = 0;
    }
    temp = temp >> 1;
    }
    return max;
    }
    -------------------------
    ý, mình bik tại sao rồi, lẽ ra phải để hàm Counter trước, hì, lỗi sơ đẳng mà cũng sai, ngại quá
    Last edited by phuongdua; 25-03-2010, 20:57.

    Leave a comment:


  • phuongdua
    replied
    Sao lại xin lỗi, mình rất vui khi dc học thêm 1 số thứ từ bạn, hy vọng bạn sẽ cung cấp thêm nhiều kiến thức bổ ích cho "ng mới" như mình.
    Cho mình hỏi, nếu type trên có thể can thiệp từng bit thì ko bik mình có thể sửa code lại thành sc_uint<5> dc ko? vì mình thấy số lượng tối đa số 1 trong 1 số 20 bit thì dùng 5 bit để diễn tả cũng ok rồi.

    Và mình có thể sử dụng cấu trúc này cho Nios II IDE bình thường chứ? hay có cần khai báo thêm gì ko?

    _ 1 câu nữa nhé. Sử dụng thư viện stdio thì cần phải có STDOUT device, nhưng ko rõ STDOUT device vd là cái gì ?
    Last edited by phuongdua; 25-03-2010, 20:11.

    Leave a comment:


  • tonyvandinh
    replied
    Nguyên văn bởi phuongdua Xem bài viết
    sc_uint<8> serries_of_1(sc_uint<num_len> &input)

    Mình ko hiểu câu lệnh này, đây là mở đầu của 1 hàm phải ko? Vậy sc_uint<8> là gì vậy bạn ?
    sc_uint là 1 systemC datatype dùng cho unsigned integer (số nguyên dương)? số trong ngoăc <> là số bit cho nên sc_uint<8> ám chỉ cho 8 bit nguyên dương. Hàm ở trên sẽ nhận 20 (num_len = 20) bit vào và cho ra 8 bits. Đây là kỹ thuật mô hình mới ở dạng C/C++ để mô tả sự bit chính xác mà chỉ có thể thực hành ở HDL (Hardware Description Language, VHDL/Verilog).

    Tôi thấy bạn it4rb dùng datatype tự nhiên của C để mô tả cho nên muốn đóng góp thêm cách mô tả khác để các bạn học hỏi thêm. Hiện giờ cách mô tả này có thể được tổng hợp để chuyển qua RTL rồi qua gate (FPGA/ASIC) mà không phải lệ thuộc vào cái IDE cố định nào. Mã ở trên có thể compile và link với Microsoft C/C++ hoặc gcc với điều kiện phải lấy systemC từ http://www.systemc.org/home/

    Có thể là tôi hơi đi xa với đề tài này. Tôi sẽ dừng tại đây và thành thật xin lỗi.

    Chào
    Tony

    Leave a comment:


  • phuongdua
    replied
    Mình ko hiểu lắm ý bạn, nhưng có lẽ ý mình ko phải vậy. Ở đây chỉ là nếu xài Altera monitor, bạn sẽ ko thể xem các thanh ghi hay debug nếu ko có hardware gắn vô, nhưng dc cái giao diện hay cách sử dụng khá đơn giản....Trong khi đó Nios II IDE là 1 chuyện khác, có khi ko cần có cái board bên cạnh, vẫn có thể dùng Nios II để debug hay tạo ra các file simulation cho mô phỏng, lại hỗ trợ nhiều ngôn ngữ, thư viện,....Nói chung là rất nhiều tính năng để khai thác. Tuy nhiên, suy cho cùng, nếu có board thì vẫn tốt hơn. Còn Nios II IDE có phải là tool của các hãng FPGA hay ko thì mình ko rõ

    sc_uint<8> serries_of_1(sc_uint<num_len> &input)
    Mình ko hiểu câu lệnh này, đây là mở đầu của 1 hàm phải ko? Vậy sc_uint<8> là gì vậy bạn ?


    ------------------
    up lại câu hỏi lúc trước của mình
    .Có ai bik hông

    Nhưng bạn ơi, bạn đã bao giờ viết code assembly trong Nios II chưa? Mình viết dc và debug Ok, nhưng tự nhiên giờ chỉ có thể debug step by step (quan sát thanh ghi từ từ), còn muốn run luôn 1 lần thì ......ko dc. Hay nói cách khác, mình mà nhấn "RUN" là nó chạy 1 lèo , và sau khi "run" xong thì mọi thanh ghi cũng "biến mất", làm mình chẳng quan sát dc kết quả gì cả
    Last edited by phuongdua; 25-03-2010, 10:46.

    Leave a comment:


  • tonyvandinh
    replied
    Nguyên văn bởi phuongdua Xem bài viết
    theo mình biết thì Altera monitor dc khuyên dùng trong các Lab, vì cách sử dụng đơn giản và ko có quá nhiều rắc rối cho ng mới học (tuy nhiên muốn xài nó thì phải có Hardware), còn Nios II IDE thì dc xem là khá "biến hoá", chính vì vậy mà trong các lab , Altera ko sử dụng Nios II vì cho rằng nó phức tạp cho newbie sử dụng, và cũng chưa thể khai thác hết Nios II IDE, nên cứ xài ALtera Monitor. Nhưng theo mình thì cứ xài Nios II IDE, vì trc sau gì cũng ko thể xài Altera Monitor mãi dc, vả lại ko có Hardware thì .....
    Phải ý của bạn là làm cách nào để chuyển mã C ở trên qua hardware mà không phải lệ thuộc vào dụng cụ của những hãng FPGA như Altera?

    Leave a comment:


  • phuongdua
    replied
    theo mình biết thì Altera monitor dc khuyên dùng trong các Lab, vì cách sử dụng đơn giản và ko có quá nhiều rắc rối cho ng mới học (tuy nhiên muốn xài nó thì phải có Hardware), còn Nios II IDE thì dc xem là khá "biến hoá", chính vì vậy mà trong các lab , Altera ko sử dụng Nios II vì cho rằng nó phức tạp cho newbie sử dụng, và cũng chưa thể khai thác hết Nios II IDE, nên cứ xài ALtera Monitor. Nhưng theo mình thì cứ xài Nios II IDE, vì trc sau gì cũng ko thể xài Altera Monitor mãi dc, vả lại ko có Hardware thì .....

    Leave a comment:


  • it4rb
    replied
    Em đang đau cả đầu với cái của nợ này cả tuần nay, làm giao tiếp với sdcard mãi mà ko dc, có ai làm thành công chưa ta, em thử với core của altera và 1 core ngoài mà cũng ko dc, chán vãi.
    À mà các bác cho em hỏi cái Nios IDE với lại cái Altera Monitor có hơn kém nhau gì ko vậy?

    Leave a comment:


  • tonyvandinh
    replied
    Tôi xin đóng góp thêm vào code của it4rb.

    Code:
    #include "systemc.h"
    #include <stdio.h>
    #define num_len 20
    
    sc_uint<8> serries_of_1(sc_uint<num_len> &input)
    {
      sc_uint<8> max_cnt = 0;   //số bit 1 cao nhất
      sc_uint<8> temp_cnt = 0; // số lần 1 liên tục
    
      for (int i=0;i<num_len;i++)
      {
         if(input[i] == 1)// thử coi bit có bằng 1 không?
               temp_cnt++;
         else
         {
            if (temp_cnt > max_cnt)
               max_cnt = temp_cnt; // tìm temp_cnt lớn nhất
            temp_cnt = 0; // nếu bit = 0, counter bắt đầu trở lại
         }
      }
      return max_cnt;
    }
    
    int main()
    {
      sc_uint<num_len> in = 0x30F01;
      sc_uint<8> out = serries_of_1(in);
      printf("out = %d\n",int(out)); 
      return 0;  
    }
    Tôi đã chạy thử và nó hoạt động như ý muốn.

    Chào
    Tony
    Last edited by tonyvandinh; 25-03-2010, 07:13. Lý do: Sửa chữa

    Leave a comment:


  • phuongdua
    replied
    oh, có lẽ mình ko rành về các sản phẩm, nhưng PSOC (programmable system on chip) và SOPC ( system on programmable chip) theo mình hiểu dù có "ám chỉ" 1 dòng cụ thể nào hay không thì ý nghĩa cũng khá giống nhau, nhưng vì mình thấy ít ng dùng từ SOPC (bạn search thì thấy kết quả toàn PSOC) nên mình mới để threat là PSOC. Nếu có gì sai thì

    Leave a comment:


  • dangki070188
    replied
    Cho mình hỏi tên threat bạn để là PSOC mà nội dung là SOPC là sao? Theo mình hiểu là PSOC là sản phẩm của cypress.

    Leave a comment:

Về tác giả

Collapse

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

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

Collapse

Đang tải...