2012年9月24日 星期一

c語言 #include 用法

#include <stdio.h> 表示這個stdio.h在某個資料夾下,非當下的資料夾
#include "stdio.h" 才是當下的資料夾下面有stdio.h
使用#include表示將某檔案加入專案,但是有一種加入方式是利用IDE(編譯器)加入,若已經使用IDE加入,就不需要使用#include

2012年9月17日 星期一

microblaze example code

SPI
1.須將所有相關code 加到src中 ,設定正確device id, 拿掉loopback的設定
2.必須設定XSpi_SetSlaveSelect(不是XSpi_SetSlaveSelectReg)而且必須在初始化之後

MISO,意思是,如果是master mode,就當作input;如果是slave mode, 就當作output

2012年9月7日 星期五

Xilinx 編譯指令:`define,`ifdef

//這樣的程式只會跑 c<=a+b 那一段,而不會跑c<=2,除非拿掉`define full
`define full
module top(
input rst,
input clk,
input [width-1:0] a,
input [width-1:0] b,
output reg [width:0] c
    );

parameter width=1;
`ifdef full
always@(posedge clk or posedge rst)begin
if(rst)
c<=0;
else
c<=a+b;
end
`else
always@(posedge clk or posedge rst)begin
if(rst)
c<=0;
else
c<=2;
end
`endif

endmodule

2012年9月4日 星期二

Xilinx Microblaze (2) -- 加入EDK 內部IP

若想在現有的XPS中新增 EDK IP,首先透過XPS中的IP catalog 將所想要的IP拖曳到System Assembly View中,切換到Address 頁面重新generate address。
回到Port頁面,Port頁面可分成兩部分,External Ports以及其他port。
External Port,顧名思義是system對外I/O設置。
其他port則是AXI匯流排系統的設置,一般port會有兩個子項目,BUS_IF 和IO_IF。
BUS_IF通常AXI(若是採AXI匯流排架構),而IO_IF就依照該IP所需要做設定,會有input or output or inout or tri-state 看是要連到外部(Make External)或只是新的接線(New Connection)或是接地(net_gnd)pull-high(net-vcc)等等。
注意!若是自己拖曳EDK IP需在完成XPS後,自行在verilog/VHDL加入訊號(腳位)宣告


2012年8月31日 星期五

Xilinx 外掛的Flash,腳位要設定嗎?

今天突然想到一個問題,如果要燒錄mcs file(fpga code for flash)的話,在top裏頭需不需要宣告flash的腳位?像是spi_clk, spi_miso, spi_mosi, spi_ss等等?似乎是不用~

2012年8月30日 星期四

microblaze-客製化SPI module

0.標準SPI有五根腳位(xilinx), MISO,MOSI,CLK,CS,SPISEL
1. 若是用Wizard增加SPI的話,只能增加一個,要是有多個 SPI需求的話,則必須要透過IP catalog慢慢新增。
然而,發現會多一根pin叫做SPISEL,若是採用SP605 package方式的話,並不會有該 pin,所以可能因為目前的project是一項項新增周邊,而XPS不曉得該SPI是master or slave所以放上了slave所特有的spisel 腳位。
若是master則必須在net選項中,選擇net vcc,也就是pull high,並且delete SPISEL此external port
若是slave則必須使其成為external port並且接到master的cs
2. 必須初始化,找出當下的旗標位置
example:
          XSpi * spiptr
       

2012年8月20日 星期一

xilinx verilog 寫法

當一個模組的reset是採用另一個模組的rdy(或其他訊號)時,進行behavior simulation會極慢!
所以最好還是採用global reset的設計。