(原創) 如何自己用SOPC Builder建立一個能在DE2上跑μC/OS-II的Nios II系統? (IC Design) (DE2) (Quartus II) (Nios II) (SOPC Builder) (μC/OS-II)

Abstract
很多人跑DE2本身的範例,都可以上μC/OS-II這個作業系統,但只要自己用SOPC Builder建立的Nios II系統,就無法上μC/OS-II,本文示範如何用SOPC Builder手動打造一個在DE2上能跑uC/OS-II的Nios II系統。

使用環境:Quartus II 7.2 SP1 + Nios II 7.2 SP1 + DE2(Cyclone II EP2C35F627C6) + μC/OS-II

Introduction
本文為我較早期的文章,雖然仍有參考價值,不過並非最佳的設計,建議您一併參考
(原創) 如何自己用SOPC Builder建立一個能在DE2上跑μC/OS-II的Nios II系統 (SRAM精簡版)? (SOC) (Quartus II) (Nios II) (SOPC Builder) (μC/OS-II) (DE2)

根據Altera原廠的資料,要讓Nios II上μC/OS-II,只要依照Using MicroC/OS-II RTOS with the Nios II Processor Tutorial這份資料照著做即可,不過這份資料有幾個問題:
1.這份資料是Altera為自己的開發版所寫的,儘管你照著步驟做,仍無法在DE2上執行。
2.他使用了已經編譯好的sof檔,若你主要是用於Nios II軟體的開發,可以採用這種方式。若你可能加入自己設計的硬體元件,則勢必重新編譯sof檔,很多人就是因為這樣而無法上μC/OS-II。

(原創) 如何成功執行『Using μC/OS-II RTOS with the Nios II Processor Tutorial』? (中級) (IC Design) (Quartus II) (Nios II) (μC/OS-II)  中雖然克服了萬難讓Nios II上μC/OS-II了,不用總有個遺憾,為什麼只能用DE2原廠範例的DE2_SD_Card_Audio.sof呢?為什麼不能自己用SOPC Builder建立一個Nios II系統跑uC/OS-II呢?後來在Terasic原廠網站
http://www.terasic.com/downloads/cd-rom/de2/DE2_System_v1.4b.zip
中發現在這個目錄下
\DE2_demonstrations\SOPC_Builder\Reference_Design\DE2_NIOS\
有Terasic原廠所建議的Nios II硬體設計,經過一番研究後,整理出這份文件。

Solution
要讓Nios II軟體跑在on-chip memory並不是不可能,但DE2最多只能有49K的on-chip memory,所以若要讓軟體能跑,必須動一些最佳化的方式讓軟體盡量的小,在(原創) 如何在DE2執行Checksum Master範例 (中級) (IC Design) (DE2) (Quartus II) (Nios II) (SOPC Builder)用過幾個方式從軟體解決,有興趣的人可以參考,本篇主要是從硬體解決,直接將μC/OS-II跑在SRAM上。

Quartus II
使用Quartus II建立一個全新的project
Step 1:
建立一個新project

ucosii00

Step 2:

 ucosii01

按Next下一步。

Step 3:
輸入project路徑名稱、project名稱與top-level module名稱,按Next下一步

ucosii02 

Step 4:
c:/DE2/hello_ucosii目錄尚未建立,是否建立此目錄,按Yes繼續

ucosii03 

Step 5:
加入既有檔案,由於我們目前沒有任何檔案,所以按Next下一步

 ucosii04

Step 6:
選擇FPGA型號,DE2用的是EP2C35F627C6,按Next下一步

ucosii05 

Step 7:
EDA工具設定,不需額外設定,按Next下一步

ucosii06 

Step 8:
最後的Summary,按Finish

ucosii07 

SOPC Builder
使用SOPC Builder建立一個全新的Nios II系統
Step 1:
啟動SOPC Builder

ucosii08

Step 2:
輸入System名稱:nios_ii,選擇Verilog

ucosii09 

Step 3:
加入Nios II Processor
選擇左側Altera SOPC Builder->Nios II Processor,滑鼠按兩下加入

ucosii10

使用預設的Nios II/f即可,按Finish

ucosii11

Step 4:
加入SRAM
由於我們要將μC/OS-II放在SRAM跑,所以要加入SRAM controller,不過這裡有個值得注意的地方,你不能使用SOPC Builder所附的SRAM controller,必須改用Terasic本身所附的SRAM controller,將SRAM_16Bit_512K.7z下載,或者
http://www.terasic.com/downloads/cd-rom/de2/DE2_System_v1.4b.zip內的\DE2_demonstrations\SOPC_Builder\Component\SRAM_16Bit_512K
目錄複製到
C:\DE2\hello_ucosii\
複製完成後,請重新開啟SOPC Builder,就可以在左側的Altera SOPC Builder->Terasic Technologies Inc\發現SRAM_16Bit_512K這個contoller,滑鼠按兩下加入

ucosii12

Step 5:
加入Tristate Bridge
由於SRAM需要連接到Tristate Bridge的slave,所以需要加入Tristate Bridge controller,在左側Altera SOPC Builder->Bridges and Adapters->Memoery Mapped下找到Avalon-MM Tristate Bridge,滑鼠按兩下加入

ucosii13

按Finish即可,完成後如下圖出現了一個錯誤訊息:

ucosii14

錯誤訊息表示Tristate Bridge的master必須接到一個slave裝置,所以加上一個Flash Memory controller連上Tristate Bridge。

Step 6:
加入Flash Memory controller
在左側Altera SOPC Builder->Memories and Memory Controllers->Flash下找到Flash Memory(CFI),按兩下加入,將Address Width(bits)改成22

ucosii15

加入後,會如下圖,發現tristate_bridge的tristate_master仍然沒和cfi_flash相接:

ucosii16

所以我們必須手動的接上去

ucosii17

Step 7:
加入JTAG UART
由於我們需在console顯示文字,所以需要加上JTAG UART
在左側Altera SOPC Builder->Interface Protocols->Serial下找到JTAG UART,滑鼠點兩下加入,接受預設值即可,按Finish

ucosii18

最後如下圖所示

ucosii19

Step 8:
加入Interval Timer
由於μC/OS-II需要用到Internal Timer,所以需要加上。
在左側Altera SOPC Builder->Peripherals->Microcontroller Peripherals下找到Interval Timer,滑鼠點兩下加入,接受預設值即可,按Finish

ucosii20

最後如下圖所示

ucosii21

Step 9:
加入System ID Peripheral
System ID Peripheral可以用來辨識硬體,雖然沒有加入也能執行,不過Altera原廠手冊仍建議加入此controller。
在左側Altera SOPC Builder->Peripherals->Debug and Performance下找到System ID Peripheral,滑鼠點兩下加入,接受預設值即可,按Finish

ucosii22

最後如下圖所示

ucosii23

Step 10:
解決錯誤訊息
上圖最下面有幾個錯誤訊息

Error : cpu.instruction_master:"cpu.jtag_debug_module"(0x800..0xfff) overlaps "cfi_flash.s1"(0x0..0x3fffff)
Error : cpu.data_master:
"cpu.jtag_debug_module"(0x800..0xfff) overlaps "cfi_flash.s1"(0x0..0x3fffff)
Error : cpu.d_irq:Interrupt number conflict(jtag_uart
, timer.irg) on 0




Error : cpu.instruction_master:"cpu.jtag_debug_module"(0x800..0xfff) overlaps "cfi_flash.s1"(0x0..0x3fffff)


點兩下,將Reset Vector選擇cfi_flash,Exception Vector選擇sram_16bit_512k_0,按Finish完成

ucosii24

Step 11:
重新分配Base Address
Menu的System->Auto-Assign Base Address

ucosii25

Step 12:
重新分配IRQ
Menu的System->Auto-Assign IRQs

ucosii26

Step 13:
新增Clock Settings
將原本clk改成100.0 Mhz
另外加上clk_50為50.0 Mhz

至此,一個能跑μC/OS-II最小的Nios II系統已經完成,而且是我們DIY用SOPC Builder完成的,最後完成圖如下。

ucosii27

最後按下Generate開始產生硬體,詢問是否儲存,按Save

ucosii28

需要一些時間,完全看你CPU速度而定。

Quartus II Top Module
至此我們還缺Quartus II的Top Module,建立一個新的Verilog檔,名為hello_ucosii.v
hello_ucosii.v

1module hello_ucosii (
2  ////////////////////    Clock Input         ////////////////////    
3    CLOCK_27,                        //    On Board 27 MHz
4  CLOCK_50,                        //    On Board 50 MHz
5    EXT_CLOCK,                        //    External Clock
6    ////////////////////    Push Button        ////////////////////
7    KEY,                            //    Pushbutton[3:0]
8    ////////////////////    Flash Interface        ////////////////
9    FL_DQ,                            //    FLASH Data bus 8 Bits
10    FL_ADDR,                        //    FLASH Address bus 20 Bits
11    FL_WE_N,                        //    FLASH Write Enable
12    FL_RST_N,                        //    FLASH Reset
13    FL_OE_N,                        //    FLASH Output Enable
14    FL_CE_N,                        //    FLASH Chip Enable
15    ////////////////////    SRAM Interface        ////////////////
16    SRAM_DQ,                        //    SRAM Data bus 16 Bits
17    SRAM_ADDR,                        //    SRAM Address bus 18 Bits
18    SRAM_UB_N,                        //    SRAM High-byte Data Mask
19    SRAM_LB_N,                        //    SRAM Low-byte Data Mask 
20    SRAM_WE_N,                        //    SRAM Write Enable
21    SRAM_CE_N,                        //    SRAM Chip Enable
22    SRAM_OE_N                        //    SRAM Output Enable
23);
24
25////////////////////////    Clock Input         ////////////////////////
26input            CLOCK_27;                //    On Board 27 MHz
27input            CLOCK_50;                //    On Board 50 MHz
28input            EXT_CLOCK;                //    External Clock
29////////////////////////    Push Button        ////////////////////////
30input    [3:0]    KEY;                    //    Pushbutton[3:0]
31
32////////////////////////    Flash Interface    ////////////////////////
33inout    [7:0]    FL_DQ;                    //    FLASH Data bus 8 Bits
34output    [21:0]    FL_ADDR;                //    FLASH Address bus 22 Bits
35output            FL_WE_N;                //    FLASH Write Enable
36output            FL_RST_N;                //    FLASH Reset
37output            FL_OE_N;                //    FLASH Output Enable
38output            FL_CE_N;                //    FLASH Chip Enable
39////////////////////////    SRAM Interface    ////////////////////////
40inout    [15:0]    SRAM_DQ;                //    SRAM Data bus 16 Bits
41output    [17:0]    SRAM_ADDR;                //    SRAM Address bus 18 Bits
42output            SRAM_UB_N;                //    SRAM Low-byte Data Mask
43output            SRAM_LB_N;                //    SRAM High-byte Data Mask
44output            SRAM_WE_N;                //    SRAM Write Enable
45output            SRAM_CE_N;                //    SRAM Chip Enable
46output            SRAM_OE_N;                //    SRAM Output Enable
47
48wire    CPU_CLK;
49wire    CPU_RESET;
50wire    CLK_18_4;
51wire    CLK_25;
52
53//    Flash
54assign    FL_RST_N    =    1'b1;
55
56Reset_Delay    delay1    (.iRST(KEY[0]),.iCLK(CLOCK_50),.oRESET(CPU_RESET));
57
58SDRAM_PLL     PLL1    (.inclk0(CLOCK_50),.c0(DRAM_CLK),.c1(CPU_CLK),.c2(CLK_25));
59
60nios_ii u0    (
61  // 1) global signals:
62  .clk(CPU_CLK),
63    .reset_n(CPU_RESET),
64   
65  // the_sram_0
66  .SRAM_ADDR_from_the_sram_16bit_512k_0(SRAM_ADDR),
67  .SRAM_CE_N_from_the_sram_16bit_512k_0(SRAM_CE_N),
68  .SRAM_DQ_to_and_from_the_sram_16bit_512k_0(SRAM_DQ),
69  .SRAM_LB_N_from_the_sram_16bit_512k_0(SRAM_LB_N),
70  .SRAM_OE_N_from_the_sram_16bit_512k_0(SRAM_OE_N),
71  .SRAM_UB_N_from_the_sram_16bit_512k_0(SRAM_UB_N),
72  .SRAM_WE_N_from_the_sram_16bit_512k_0(SRAM_WE_N),
73           
74   // the_tri_state_bridge_0_avalon_slave
75   .select_n_to_the_cfi_flash(FL_CE_N),
76   .address_to_the_cfi_flash(FL_ADDR),
77   .data_to_and_from_the_cfi_flash(FL_DQ),
78   .read_n_to_the_cfi_flash(FL_OE_N),
79   .write_n_to_the_cfi_flash(FL_WE_N)
80);
81
82endmodule


56行的Reset_Dealy module和SDRAM_PLL module,我們須自己建立。
Reset_Delay.v

1module    Reset_Delay(iRST,iCLK,oRESET);
2input        iCLK;
3input        iRST;
4output reg    oRESET;
5reg    [23:0]    Cont;
6
7always@(posedge iCLK or negedge iRST)
8begin
9    if(!iRST)
10    begin
11        oRESET    <=    1'b0;
12        Cont    <=    24'h0000000;
13    end
14    else
15    begin
16        if(Cont!=24'hFFFFFF)
17        begin
18            Cont    <=    Cont+1;
19            oRESET    <=    1'b0;
20        end
21        else
22        oRESET    <=    1'b1;
23    end
24end
25
26endmodule


SDRAM_PLL.v

  1// megafunction wizard: %ALTPLL%
  2// GENERATION: STANDARD
  3// VERSION: WM1.0
  4// MODULE: altpll
  5
  6// ============================================================
  7// File Name: SDRAM_PLL.v
  8// Megafunction Name(s):
  9//             altpll
10// ============================================================
11// ************************************************************
12// THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE!
13//
14// 6.0 Build 202 06/20/2006 SP 1 SJ Full Version
15// ************************************************************
16
17
18//Copyright (C) 1991-2006 Altera Corporation
19//Your use of Altera Corporation's design tools, logic functions
20//and other software and tools, and its AMPP partner logic
21//functions, and any output files any of the foregoing
22//(including device programming or simulation files), and any
23//associated documentation or information are expressly subject
24//to the terms and conditions of the Altera Program License
25//Subscription Agreement, Altera MegaCore Function License
26//Agreement, or other applicable license agreement, including,
27//without limitation, that your use is for the sole purpose of
28//programming logic devices manufactured by Altera and sold by
29//Altera or its authorized distributors.  Please refer to the
30//applicable agreement for further details.
31
32
33// synopsys translate_off
34`timescale 1 ps / 1 ps
35// synopsys translate_on
36module SDRAM_PLL (
37    inclk0,
38    c0,
39    c1,
40    c2);
41
42    input      inclk0;
43    output      c0;
44    output      c1;
45    output      c2;
46
47    wire [5:0] sub_wire0;
48    wire [0:0] sub_wire6 = 1'h0;
49    wire [2:2] sub_wire3 = sub_wire0[2:2];
50    wire [1:1] sub_wire2 = sub_wire0[1:1];
51    wire [0:0] sub_wire1 = sub_wire0[0:0];
52    wire  c0 = sub_wire1;
53    wire  c1 = sub_wire2;
54    wire  c2 = sub_wire3;
55    wire  sub_wire4 = inclk0;
56    wire [1:0] sub_wire5 = {sub_wire6, sub_wire4};
57
58    altpll    altpll_component (
59                .inclk (sub_wire5),
60                .clk (sub_wire0),
61                .activeclock (),
62                .areset (1'b0),
63                .clkbad (),
64                .clkena ({6{1'b1}}),
65                .clkloss (),
66                .clkswitch (1'b0),
67                .enable0 (),
68                .enable1 (),
69                .extclk (),
70                .extclkena ({4{1'b1}}),
71                .fbin (1'b1),
72                .locked (),
73                .pfdena (1'b1),
74                .pllena (1'b1),
75                .scanaclr (1'b0),
76                .scanclk (1'b0),
77                .scandata (1'b0),
78                .scandataout (),
79                .scandone (),
80                .scanread (1'b0),
81                .scanwrite (1'b0),
82                .sclkout0 (),
83                .sclkout1 ());
84    defparam
85        altpll_component.clk0_divide_by = 1,
86        altpll_component.clk0_duty_cycle = 50,
87        altpll_component.clk0_multiply_by = 1,
88        altpll_component.clk0_phase_shift = "-3000",
89        altpll_component.clk1_divide_by = 1,
90        altpll_component.clk1_duty_cycle = 50,
91        altpll_component.clk1_multiply_by = 2,
92        altpll_component.clk1_phase_shift = "0",
93        altpll_component.clk2_divide_by = 2,
94        altpll_component.clk2_duty_cycle = 50,
95        altpll_component.clk2_multiply_by = 1,
96        altpll_component.clk2_phase_shift = "0",
97        altpll_component.compensate_clock = "CLK0",
98        altpll_component.inclk0_input_frequency = 20000,
99        altpll_component.intended_device_family = "Cyclone II",
100        altpll_component.lpm_type = "altpll",
101        altpll_component.operation_mode = "NORMAL",
102        altpll_component.pll_type = "FAST",
103        altpll_component.port_activeclock = "PORT_UNUSED",
104        altpll_component.port_areset = "PORT_UNUSED",
105        altpll_component.port_clkbad0 = "PORT_UNUSED",
106        altpll_component.port_clkbad1 = "PORT_UNUSED",
107        altpll_component.port_clkloss = "PORT_UNUSED",
108        altpll_component.port_clkswitch = "PORT_UNUSED",
109        altpll_component.port_fbin = "PORT_UNUSED",
110        altpll_component.port_inclk0 = "PORT_USED",
111        altpll_component.port_inclk1 = "PORT_UNUSED",
112        altpll_component.port_locked = "PORT_UNUSED",
113        altpll_component.port_pfdena = "PORT_UNUSED",
114        altpll_component.port_pllena = "PORT_UNUSED",
115        altpll_component.port_scanaclr = "PORT_UNUSED",
116        altpll_component.port_scanclk = "PORT_UNUSED",
117        altpll_component.port_scandata = "PORT_UNUSED",
118        altpll_component.port_scandataout = "PORT_UNUSED",
119        altpll_component.port_scandone = "PORT_UNUSED",
120        altpll_component.port_scanread = "PORT_UNUSED",
121        altpll_component.port_scanwrite = "PORT_UNUSED",
122        altpll_component.port_clk0 = "PORT_USED",
123        altpll_component.port_clk1 = "PORT_USED",
124        altpll_component.port_clk2 = "PORT_USED",
125        altpll_component.port_clk3 = "PORT_UNUSED",
126        altpll_component.port_clk4 = "PORT_UNUSED",
127        altpll_component.port_clk5 = "PORT_UNUSED",
128        altpll_component.port_clkena0 = "PORT_UNUSED",
129        altpll_component.port_clkena1 = "PORT_UNUSED",
130        altpll_component.port_clkena2 = "PORT_UNUSED",
131        altpll_component.port_clkena3 = "PORT_UNUSED",
132        altpll_component.port_clkena4 = "PORT_UNUSED",
133        altpll_component.port_clkena5 = "PORT_UNUSED",
134        altpll_component.port_enable0 = "PORT_UNUSED",
135        altpll_component.port_enable1 = "PORT_UNUSED",
136        altpll_component.port_extclk0 = "PORT_UNUSED",
137        altpll_component.port_extclk1 = "PORT_UNUSED",
138        altpll_component.port_extclk2 = "PORT_UNUSED",
139        altpll_component.port_extclk3 = "PORT_UNUSED",
140        altpll_component.port_extclkena0 = "PORT_UNUSED",
141        altpll_component.port_extclkena1 = "PORT_UNUSED",
142        altpll_component.port_extclkena2 = "PORT_UNUSED",
143        altpll_component.port_extclkena3 = "PORT_UNUSED",
144        altpll_component.port_sclkout0 = "PORT_UNUSED",
145        altpll_component.port_sclkout1 = "PORT_UNUSED";
146
147
148endmodule
149
150// ============================================================
151// CNX file retrieval info
152// ============================================================
153// Retrieval info: PRIVATE: ACTIVECLK_CHECK STRING "0"
154// Retrieval info: PRIVATE: BANDWIDTH STRING "1.000"
155// Retrieval info: PRIVATE: BANDWIDTH_FEATURE_ENABLED STRING "0"
156// Retrieval info: PRIVATE: BANDWIDTH_FREQ_UNIT STRING "MHz"
157// Retrieval info: PRIVATE: BANDWIDTH_PRESET STRING "Low"
158// Retrieval info: PRIVATE: BANDWIDTH_USE_AUTO STRING "1"
159// Retrieval info: PRIVATE: BANDWIDTH_USE_CUSTOM STRING "0"
160// Retrieval info: PRIVATE: BANDWIDTH_USE_PRESET STRING "0"
161// Retrieval info: PRIVATE: CLKBAD_SWITCHOVER_CHECK STRING "0"
162// Retrieval info: PRIVATE: CLKLOSS_CHECK STRING "0"
163// Retrieval info: PRIVATE: CLKSWITCH_CHECK STRING "1"
164// Retrieval info: PRIVATE: CNX_NO_COMPENSATE_RADIO STRING "0"
165// Retrieval info: PRIVATE: CREATE_CLKBAD_CHECK STRING "0"
166// Retrieval info: PRIVATE: CREATE_INCLK1_CHECK STRING "0"
167// Retrieval info: PRIVATE: CUR_DEDICATED_CLK STRING "c0"
168// Retrieval info: PRIVATE: CUR_FBIN_CLK STRING "e0"
169// Retrieval info: PRIVATE: DEVICE_SPEED_GRADE STRING "Any"
170// Retrieval info: PRIVATE: DEV_FAMILY STRING "Cyclone II"
171// Retrieval info: PRIVATE: DIV_FACTOR0 NUMERIC "1"
172// Retrieval info: PRIVATE: DIV_FACTOR1 NUMERIC "2"
173// Retrieval info: PRIVATE: DIV_FACTOR2 NUMERIC "1"
174// Retrieval info: PRIVATE: DUTY_CYCLE0 STRING "50.00000000"
175// Retrieval info: PRIVATE: DUTY_CYCLE1 STRING "50.00000000"
176// Retrieval info: PRIVATE: DUTY_CYCLE2 STRING "50.00000000"
177// Retrieval info: PRIVATE: EXT_FEEDBACK_RADIO STRING "0"
178// Retrieval info: PRIVATE: GLOCKED_COUNTER_EDIT_CHANGED STRING "1"
179// Retrieval info: PRIVATE: GLOCKED_FEATURE_ENABLED STRING "1"
180// Retrieval info: PRIVATE: GLOCKED_MODE_CHECK STRING "0"
181// Retrieval info: PRIVATE: GLOCK_COUNTER_EDIT NUMERIC "1048575"
182// Retrieval info: PRIVATE: HAS_MANUAL_SWITCHOVER STRING "1"
183// Retrieval info: PRIVATE: INCLK0_FREQ_EDIT STRING "50.000"
184// Retrieval info: PRIVATE: INCLK0_FREQ_UNIT_COMBO STRING "MHz"
185// Retrieval info: PRIVATE: INCLK1_FREQ_EDIT STRING "50.000"
186// Retrieval info: PRIVATE: INCLK1_FREQ_EDIT_CHANGED STRING "1"
187// Retrieval info: PRIVATE: INCLK1_FREQ_UNIT_CHANGED STRING "1"
188// Retrieval info: PRIVATE: INCLK1_FREQ_UNIT_COMBO STRING "MHz"
189// Retrieval info: PRIVATE: INT_FEEDBACK__MODE_RADIO STRING "1"
190// Retrieval info: PRIVATE: LOCKED_OUTPUT_CHECK STRING "0"
191// Retrieval info: PRIVATE: LONG_SCAN_RADIO STRING "1"
192// Retrieval info: PRIVATE: LVDS_MODE_DATA_RATE STRING "Not Available"
193// Retrieval info: PRIVATE: LVDS_MODE_DATA_RATE_DIRTY NUMERIC "0"
194// Retrieval info: PRIVATE: LVDS_PHASE_SHIFT_UNIT0 STRING "deg"
195// Retrieval info: PRIVATE: LVDS_PHASE_SHIFT_UNIT1 STRING "ps"
196// Retrieval info: PRIVATE: LVDS_PHASE_SHIFT_UNIT2 STRING "ps"
197// Retrieval info: PRIVATE: MIRROR_CLK0 STRING "0"
198// Retrieval info: PRIVATE: MIRROR_CLK1 STRING "0"
199// Retrieval info: PRIVATE: MIRROR_CLK2 STRING "0"
200// Retrieval info: PRIVATE: MULT_FACTOR0 NUMERIC "1"
201// Retrieval info: PRIVATE: MULT_FACTOR1 NUMERIC "1"
202// Retrieval info: PRIVATE: MULT_FACTOR2 NUMERIC "1"
203// Retrieval info: PRIVATE: NORMAL_MODE_RADIO STRING "1"
204// Retrieval info: PRIVATE: OUTPUT_FREQ0 STRING "50.00000000"
205// Retrieval info: PRIVATE: OUTPUT_FREQ1 STRING "100.00000000"
206// Retrieval info: PRIVATE: OUTPUT_FREQ2 STRING "25.00000000"
207// Retrieval info: PRIVATE: OUTPUT_FREQ_MODE0 STRING "1"
208// Retrieval info: PRIVATE: OUTPUT_FREQ_MODE1 STRING "1"
209// Retrieval info: PRIVATE: OUTPUT_FREQ_MODE2 STRING "1"
210// Retrieval info: PRIVATE: OUTPUT_FREQ_UNIT0 STRING "MHz"
211// Retrieval info: PRIVATE: OUTPUT_FREQ_UNIT1 STRING "MHz"
212// Retrieval info: PRIVATE: OUTPUT_FREQ_UNIT2 STRING "MHz"
213// Retrieval info: PRIVATE: PHASE_SHIFT0 STRING "-3.00000000"
214// Retrieval info: PRIVATE: PHASE_SHIFT1 STRING "0.00000000"
215// Retrieval info: PRIVATE: PHASE_SHIFT2 STRING "0.00000000"
216// Retrieval info: PRIVATE: PHASE_SHIFT_UNIT0 STRING "ns"
217// Retrieval info: PRIVATE: PHASE_SHIFT_UNIT1 STRING "ps"
218// Retrieval info: PRIVATE: PHASE_SHIFT_UNIT2 STRING "ps"
219// Retrieval info: PRIVATE: PLL_ADVANCED_PARAM_CHECK STRING "0"
220// Retrieval info: PRIVATE: PLL_ARESET_CHECK STRING "0"
221// Retrieval info: PRIVATE: PLL_AUTOPLL_CHECK NUMERIC "1"
222// Retrieval info: PRIVATE: PLL_ENA_CHECK STRING "0"
223// Retrieval info: PRIVATE: PLL_ENHPLL_CHECK NUMERIC "0"
224// Retrieval info: PRIVATE: PLL_FASTPLL_CHECK NUMERIC "0"
225// Retrieval info: PRIVATE: PLL_LVDS_PLL_CHECK NUMERIC "0"
226// Retrieval info: PRIVATE: PLL_PFDENA_CHECK STRING "0"
227// Retrieval info: PRIVATE: PLL_TARGET_HARCOPY_CHECK NUMERIC "0"
228// Retrieval info: PRIVATE: PRIMARY_CLK_COMBO STRING "inclk0"
229// Retrieval info: PRIVATE: SACN_INPUTS_CHECK STRING "0"
230// Retrieval info: PRIVATE: SCAN_FEATURE_ENABLED STRING "0"
231// Retrieval info: PRIVATE: SELF_RESET_LOCK_LOSS STRING "0"
232// Retrieval info: PRIVATE: SHORT_SCAN_RADIO STRING "0"
233// Retrieval info: PRIVATE: SPREAD_FEATURE_ENABLED STRING "0"
234// Retrieval info: PRIVATE: SPREAD_FREQ STRING "50.000"
235// Retrieval info: PRIVATE: SPREAD_FREQ_UNIT STRING "KHz"
236// Retrieval info: PRIVATE: SPREAD_PERCENT STRING "0.500"
237// Retrieval info: PRIVATE: SPREAD_USE STRING "0"
238// Retrieval info: PRIVATE: SRC_SYNCH_COMP_RADIO STRING "0"
239// Retrieval info: PRIVATE: STICKY_CLK0 STRING "1"
240// Retrieval info: PRIVATE: STICKY_CLK1 STRING "1"
241// Retrieval info: PRIVATE: STICKY_CLK2 STRING "1"
242// Retrieval info: PRIVATE: SWITCHOVER_COUNT_EDIT NUMERIC "1"
243// Retrieval info: PRIVATE: SWITCHOVER_FEATURE_ENABLED STRING "1"
244// Retrieval info: PRIVATE: USE_CLK0 STRING "1"
245// Retrieval info: PRIVATE: USE_CLK1 STRING "1"
246// Retrieval info: PRIVATE: USE_CLK2 STRING "1"
247// Retrieval info: PRIVATE: USE_CLKENA0 STRING "0"
248// Retrieval info: PRIVATE: USE_CLKENA1 STRING "0"
249// Retrieval info: PRIVATE: USE_CLKENA2 STRING "0"
250// Retrieval info: PRIVATE: ZERO_DELAY_RADIO STRING "0"
251// Retrieval info: LIBRARY: altera_mf altera_mf.altera_mf_components.all
252// Retrieval info: CONSTANT: CLK0_DIVIDE_BY NUMERIC "1"
253// Retrieval info: CONSTANT: CLK0_DUTY_CYCLE NUMERIC "50"
254// Retrieval info: CONSTANT: CLK0_MULTIPLY_BY NUMERIC "1"
255// Retrieval info: CONSTANT: CLK0_PHASE_SHIFT STRING "-3000"
256// Retrieval info: CONSTANT: CLK1_DIVIDE_BY NUMERIC "1"
257// Retrieval info: CONSTANT: CLK1_DUTY_CYCLE NUMERIC "50"
258// Retrieval info: CONSTANT: CLK1_MULTIPLY_BY NUMERIC "2"
259// Retrieval info: CONSTANT: CLK1_PHASE_SHIFT STRING "0"
260// Retrieval info: CONSTANT: CLK2_DIVIDE_BY NUMERIC "2"
261// Retrieval info: CONSTANT: CLK2_DUTY_CYCLE NUMERIC "50"
262// Retrieval info: CONSTANT: CLK2_MULTIPLY_BY NUMERIC "1"
263// Retrieval info: CONSTANT: CLK2_PHASE_SHIFT STRING "0"
264// Retrieval info: CONSTANT: COMPENSATE_CLOCK STRING "CLK0"
265// Retrieval info: CONSTANT: INCLK0_INPUT_FREQUENCY NUMERIC "20000"
266// Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Cyclone II"
267// Retrieval info: CONSTANT: LPM_TYPE STRING "altpll"
268// Retrieval info: CONSTANT: OPERATION_MODE STRING "NORMAL"
269// Retrieval info: CONSTANT: PLL_TYPE STRING "FAST"
270// Retrieval info: CONSTANT: PORT_ACTIVECLOCK STRING "PORT_UNUSED"
271// Retrieval info: CONSTANT: PORT_ARESET STRING "PORT_UNUSED"
272// Retrieval info: CONSTANT: PORT_CLKBAD0 STRING "PORT_UNUSED"
273// Retrieval info: CONSTANT: PORT_CLKBAD1 STRING "PORT_UNUSED"
274// Retrieval info: CONSTANT: PORT_CLKLOSS STRING "PORT_UNUSED"
275// Retrieval info: CONSTANT: PORT_CLKSWITCH STRING "PORT_UNUSED"
276// Retrieval info: CONSTANT: PORT_FBIN STRING "PORT_UNUSED"
277// Retrieval info: CONSTANT: PORT_INCLK0 STRING "PORT_USED"
278// Retrieval info: CONSTANT: PORT_INCLK1 STRING "PORT_UNUSED"
279// Retrieval info: CONSTANT: PORT_LOCKED STRING "PORT_UNUSED"
280// Retrieval info: CONSTANT: PORT_PFDENA STRING "PORT_UNUSED"
281// Retrieval info: CONSTANT: PORT_PLLENA STRING "PORT_UNUSED"
282// Retrieval info: CONSTANT: PORT_SCANACLR STRING "PORT_UNUSED"
283// Retrieval info: CONSTANT: PORT_SCANCLK STRING "PORT_UNUSED"
284// Retrieval info: CONSTANT: PORT_SCANDATA STRING "PORT_UNUSED"
285// Retrieval info: CONSTANT: PORT_SCANDATAOUT STRING "PORT_UNUSED"
286// Retrieval info: CONSTANT: PORT_SCANDONE STRING "PORT_UNUSED"
287// Retrieval info: CONSTANT: PORT_SCANREAD STRING "PORT_UNUSED"
288// Retrieval info: CONSTANT: PORT_SCANWRITE STRING "PORT_UNUSED"
289// Retrieval info: CONSTANT: PORT_clk0 STRING "PORT_USED"
290// Retrieval info: CONSTANT: PORT_clk1 STRING "PORT_USED"
291// Retrieval info: CONSTANT: PORT_clk2 STRING "PORT_USED"
292// Retrieval info: CONSTANT: PORT_clk3 STRING "PORT_UNUSED"
293// Retrieval info: CONSTANT: PORT_clk4 STRING "PORT_UNUSED"
294// Retrieval info: CONSTANT: PORT_clk5 STRING "PORT_UNUSED"
295// Retrieval info: CONSTANT: PORT_clkena0 STRING "PORT_UNUSED"
296// Retrieval info: CONSTANT: PORT_clkena1 STRING "PORT_UNUSED"
297// Retrieval info: CONSTANT: PORT_clkena2 STRING "PORT_UNUSED"
298// Retrieval info: CONSTANT: PORT_clkena3 STRING "PORT_UNUSED"
299// Retrieval info: CONSTANT: PORT_clkena4 STRING "PORT_UNUSED"
300// Retrieval info: CONSTANT: PORT_clkena5 STRING "PORT_UNUSED"
301// Retrieval info: CONSTANT: PORT_enable0 STRING "PORT_UNUSED"
302// Retrieval info: CONSTANT: PORT_enable1 STRING "PORT_UNUSED"
303// Retrieval info: CONSTANT: PORT_extclk0 STRING "PORT_UNUSED"
304// Retrieval info: CONSTANT: PORT_extclk1 STRING "PORT_UNUSED"
305// Retrieval info: CONSTANT: PORT_extclk2 STRING "PORT_UNUSED"
306// Retrieval info: CONSTANT: PORT_extclk3 STRING "PORT_UNUSED"
307// Retrieval info: CONSTANT: PORT_extclkena0 STRING "PORT_UNUSED"
308// Retrieval info: CONSTANT: PORT_extclkena1 STRING "PORT_UNUSED"
309// Retrieval info: CONSTANT: PORT_extclkena2 STRING "PORT_UNUSED"
310// Retrieval info: CONSTANT: PORT_extclkena3 STRING "PORT_UNUSED"
311// Retrieval info: CONSTANT: PORT_sclkout0 STRING "PORT_UNUSED"
312// Retrieval info: CONSTANT: PORT_sclkout1 STRING "PORT_UNUSED"
313// Retrieval info: USED_PORT: @clk 0 0 6 0 OUTPUT_CLK_EXT VCC "@clk[5..0]"
314// Retrieval info: USED_PORT: @extclk 0 0 4 0 OUTPUT_CLK_EXT VCC "@extclk[3..0]"
315// Retrieval info: USED_PORT: c0 0 0 0 0 OUTPUT_CLK_EXT VCC "c0"
316// Retrieval info: USED_PORT: c1 0 0 0 0 OUTPUT_CLK_EXT VCC "c1"
317// Retrieval info: USED_PORT: c2 0 0 0 0 OUTPUT_CLK_EXT VCC "c2"
318// Retrieval info: USED_PORT: inclk0 0 0 0 0 INPUT_CLK_EXT GND "inclk0"
319// Retrieval info: CONNECT: @inclk 0 0 1 0 inclk0 0 0 0 0
320// Retrieval info: CONNECT: c0 0 0 0 0 @clk 0 0 1 0
321// Retrieval info: CONNECT: c1 0 0 0 0 @clk 0 0 1 1
322// Retrieval info: CONNECT: c2 0 0 0 0 @clk 0 0 1 2
323// Retrieval info: CONNECT: @inclk 0 0 1 1 GND 0 0 0 0
324// Retrieval info: GEN_FILE: TYPE_NORMAL SDRAM_PLL.v TRUE FALSE
325// Retrieval info: GEN_FILE: TYPE_NORMAL SDRAM_PLL.inc FALSE FALSE
326// Retrieval info: GEN_FILE: TYPE_NORMAL SDRAM_PLL.cmp FALSE FALSE
327// Retrieval info: GEN_FILE: TYPE_NORMAL SDRAM_PLL.bsf FALSE FALSE
328// Retrieval info: GEN_FILE: TYPE_NORMAL SDRAM_PLL_inst.v FALSE FALSE
329// Retrieval info: GEN_FILE: TYPE_NORMAL SDRAM_PLL_bb.v FALSE FALSE
330// Retrieval info: GEN_FILE: TYPE_NORMAL SDRAM_PLL_waveforms.html FALSE FALSE
331// Retrieval info: GEN_FILE: TYPE_NORMAL SDRAM_PLL_wave*.jpg FALSE FALSE
332// Retrieval info: GEN_FILE: TYPE_NORMAL SDRAM_PLL.ppf TRUE FALSE


你一定會問,為什麼還要自己加上Reset_Delay.v和SDRAM_PLL.v,明明我只用到SRAM,卻還要用到SDRAM的pll?

這是參考友晶科技reference design的作法,所以加上Reset_Delay.v和SDRAM_PLL.v。

先談SDRAM_PLL.v,這是由MegaWizard透過MegaCore產生出來的code,主要有三個功能,c0產生SDRAM所需要的50MHz相位延遲60度的clock,c1產生100MHz給Nios II CPU使用,c2產生除頻的25MHz,由於要讓Nios II CPU跑100MHz,所以才動用SDRAM_PLL.v。

Reset_Delay.v則是延緩reset的時間,詳細理由我還不清楚。

根據實驗,若你願意只讓Nios II CPU只跑50MHz,的確可以不加SDRAM_PLL.v和Reset_Delay.v,依然可以正常運作。
hello_ucosii.v

 1module hello_ucosii (
 2  ////////////////////    Clock Input         ////////////////////     
 3    CLOCK_27,                         //    On Board 27 MHz
 4  CLOCK_50,                         //    On Board 50 MHz
 5    EXT_CLOCK,                   //    External Clock
 6    ////////////////////    Push Button        ////////////////////
 7    KEY,                               //    Pushbutton[3:0]
 8    ////////////////////    Flash Interface        ////////////////
 9    FL_DQ,                             //    FLASH Data bus 8 Bits
10    FL_ADDR,                         //    FLASH Address bus 20 Bits
11    FL_WE_N,                         //    FLASH Write Enable
12    FL_RST_N,                         //    FLASH Reset
13    FL_OE_N,                         //    FLASH Output Enable
14    FL_CE_N,                         //    FLASH Chip Enable
15    ////////////////////    SRAM Interface        ////////////////
16    SRAM_DQ,                         //    SRAM Data bus 16 Bits
17    SRAM_ADDR,                     //    SRAM Address bus 18 Bits
18    SRAM_UB_N,                     //    SRAM High-byte Data Mask
19    SRAM_LB_N,                     //    SRAM Low-byte Data Mask  
20    SRAM_WE_N,                     //    SRAM Write Enable
21    SRAM_CE_N,                     //    SRAM Chip Enable
22    SRAM_OE_N                         //    SRAM Output Enable
23);
24
25////////////////////////    Clock Input         ////////////////////////
26input              CLOCK_27;     //    On Board 27 MHz
27input              CLOCK_50;     //    On Board 50 MHz
28input              EXT_CLOCK; //    External Clock
29
30////////////////////////    Push Button        ////////////////////////
31input     [3:0]    KEY;        //    Pushbutton[3:0]
32
33////////////////////////    Flash Interface    ////////////////////////
34inout     [7:0]    FL_DQ;        //    FLASH Data bus 8 Bits
35output [21:0]    FL_ADDR;    //    FLASH Address bus 22 Bits
36output              FL_WE_N;    //    FLASH Write Enable
37output              FL_RST_N;    //    FLASH Reset
38output              FL_OE_N;    //    FLASH Output Enable
39output              FL_CE_N;    //    FLASH Chip Enable
40
41////////////////////////    SRAM Interface    ////////////////////////
42inout     [15:0]    SRAM_DQ;        //    SRAM Data bus 16 Bits
43output [17:0]    SRAM_ADDR;    //    SRAM Address bus 18 Bits
44output              SRAM_UB_N;    //    SRAM Low-byte Data Mask 
45output              SRAM_LB_N;    //    SRAM High-byte Data Mask 
46output              SRAM_WE_N;  //    SRAM Write Enable
47output              SRAM_CE_N;    //    SRAM Chip Enable
48output              SRAM_OE_N;    //    SRAM Output Enable
49
50//    Flash
51assign    FL_RST_N    =    1'b1;
52
53nios_ii u0    (
54  // 1) global signals:
55  .clk(CPU_CLK),
56    .reset_n(KEY[0]),
57    
58  // the_sram_0
59  .SRAM_ADDR_from_the_sram_16bit_512k_0(SRAM_ADDR),
60  .SRAM_CE_N_from_the_sram_16bit_512k_0(SRAM_CE_N),
61  .SRAM_DQ_to_and_from_the_sram_16bit_512k_0(SRAM_DQ),
62  .SRAM_LB_N_from_the_sram_16bit_512k_0(SRAM_LB_N),
63  .SRAM_OE_N_from_the_sram_16bit_512k_0(SRAM_OE_N),
64  .SRAM_UB_N_from_the_sram_16bit_512k_0(SRAM_UB_N),
65  .SRAM_WE_N_from_the_sram_16bit_512k_0(SRAM_WE_N),
66            
67   // the_tri_state_bridge_0_avalon_slave
68   .select_n_to_the_cfi_flash(FL_CE_N),
69   .address_to_the_cfi_flash(FL_ADDR),
70   .data_to_and_from_the_cfi_flash(FL_DQ),
71   .read_n_to_the_cfi_flash(FL_OE_N),
72   .write_n_to_the_cfi_flash(FL_WE_N)
73);
74
75endmodule


處理pin腳
Step 1:
pins.tcl

1cmp add_assignment "hello_ucosii" "" "CLOCK_27" "LOCATION" "PIN_D13"
2cmp add_assignment "hello_ucosii" "" "CLOCK_50" "LOCATION" "PIN_N2"
3cmp add_assignment "hello_ucosii" "" "EXT_CLOCK" "LOCATION" "PIN_N26"
4cmp add_assignment "hello_ucosii" "" "EXT_CLOCK" "LOCATION" "PIN_N26"
5cmp add_assignment "hello_ucosii" "" "KEY[0]" "LOCATION" "PIN_G26"
6cmp add_assignment "hello_ucosii" "" "KEY[1]" "LOCATION" "PIN_N23"
7cmp add_assignment "hello_ucosii" "" "KEY[2]" "LOCATION" "PIN_P23"
8cmp add_assignment "hello_ucosii" "" "KEY[3]" "LOCATION" "PIN_W26"
9cmp add_assignment "hello_ucosii" "" "SRAM_ADDR[0]" "LOCATION" "PIN_AE4"
10cmp add_assignment "hello_ucosii" "" "SRAM_ADDR[1]" "LOCATION" "PIN_AF4"
11cmp add_assignment "hello_ucosii" "" "SRAM_ADDR[2]" "LOCATION" "PIN_AC5"
12cmp add_assignment "hello_ucosii" "" "SRAM_ADDR[3]" "LOCATION" "PIN_AC6"
13cmp add_assignment "hello_ucosii" "" "SRAM_ADDR[4]" "LOCATION" "PIN_AD4"
14cmp add_assignment "hello_ucosii" "" "SRAM_ADDR[5]" "LOCATION" "PIN_AD5"
15cmp add_assignment "hello_ucosii" "" "SRAM_ADDR[6]" "LOCATION" "PIN_AE5"
16cmp add_assignment "hello_ucosii" "" "SRAM_ADDR[7]" "LOCATION" "PIN_AF5"
17cmp add_assignment "hello_ucosii" "" "SRAM_ADDR[8]" "LOCATION" "PIN_AD6"
18cmp add_assignment "hello_ucosii" "" "SRAM_ADDR[9]" "LOCATION" "PIN_AD7"
19cmp add_assignment "hello_ucosii" "" "SRAM_ADDR[10]" "LOCATION" "PIN_V10"
20cmp add_assignment "hello_ucosii" "" "SRAM_ADDR[11]" "LOCATION" "PIN_V9"
21cmp add_assignment "hello_ucosii" "" "SRAM_ADDR[12]" "LOCATION" "PIN_AC7"
22cmp add_assignment "hello_ucosii" "" "SRAM_ADDR[13]" "LOCATION" "PIN_W8"
23cmp add_assignment "hello_ucosii" "" "SRAM_ADDR[14]" "LOCATION" "PIN_W10"
24cmp add_assignment "hello_ucosii" "" "SRAM_ADDR[15]" "LOCATION" "PIN_Y10"
25cmp add_assignment "hello_ucosii" "" "SRAM_ADDR[16]" "LOCATION" "PIN_AB8"
26cmp add_assignment "hello_ucosii" "" "SRAM_ADDR[17]" "LOCATION" "PIN_AC8"
27cmp add_assignment "hello_ucosii" "" "SRAM_CE_N" "LOCATION" "PIN_AC11"
28cmp add_assignment "hello_ucosii" "" "SRAM_DQ[0]" "LOCATION" "PIN_AD8"
29cmp add_assignment "hello_ucosii" "" "SRAM_DQ[1]" "LOCATION" "PIN_AE6"
30cmp add_assignment "hello_ucosii" "" "SRAM_DQ[2]" "LOCATION" "PIN_AF6"
31cmp add_assignment "hello_ucosii" "" "SRAM_DQ[3]" "LOCATION" "PIN_AA9"
32cmp add_assignment "hello_ucosii" "" "SRAM_DQ[4]" "LOCATION" "PIN_AA10"
33cmp add_assignment "hello_ucosii" "" "SRAM_DQ[5]" "LOCATION" "PIN_AB10"
34cmp add_assignment "hello_ucosii" "" "SRAM_DQ[6]" "LOCATION" "PIN_AA11"
35cmp add_assignment "hello_ucosii" "" "SRAM_DQ[7]" "LOCATION" "PIN_Y11"
36cmp add_assignment "hello_ucosii" "" "SRAM_DQ[8]" "LOCATION" "PIN_AE7"
37cmp add_assignment "hello_ucosii" "" "SRAM_DQ[9]" "LOCATION" "PIN_AF7"
38cmp add_assignment "hello_ucosii" "" "SRAM_DQ[10]" "LOCATION" "PIN_AE8"
39cmp add_assignment "hello_ucosii" "" "SRAM_DQ[11]" "LOCATION" "PIN_AF8"
40cmp add_assignment "hello_ucosii" "" "SRAM_DQ[12]" "LOCATION" "PIN_W11"
41cmp add_assignment "hello_ucosii" "" "SRAM_DQ[13]" "LOCATION" "PIN_W12"
42cmp add_assignment "hello_ucosii" "" "SRAM_DQ[14]" "LOCATION" "PIN_AC9"
43cmp add_assignment "hello_ucosii" "" "SRAM_DQ[15]" "LOCATION" "PIN_AC10"
44cmp add_assignment "hello_ucosii" "" "SRAM_LB_N" "LOCATION" "PIN_AE9"
45cmp add_assignment "hello_ucosii" "" "SRAM_OE_N" "LOCATION" "PIN_AD10"
46cmp add_assignment "hello_ucosii" "" "SRAM_UB_N" "LOCATION" "PIN_AF9"
47cmp add_assignment "hello_ucosii" "" "SRAM_WE_N" "LOCATION" "PIN_AE10"
48cmp add_assignment "hello_ucosii" "" "FL_CE_N" "LOCATION" "PIN_V17"
49cmp add_assignment "hello_ucosii" "" "FL_ADDR[0]" "LOCATION" "PIN_AC18"
50cmp add_assignment "hello_ucosii" "" "FL_ADDR[1]" "LOCATION" "PIN_AB18"
51cmp add_assignment "hello_ucosii" "" "FL_ADDR[2]" "LOCATION" "PIN_AE19"
52cmp add_assignment "hello_ucosii" "" "FL_ADDR[3]" "LOCATION" "PIN_AF19"
53cmp add_assignment "hello_ucosii" "" "FL_ADDR[4]" "LOCATION" "PIN_AE18"
54cmp add_assignment "hello_ucosii" "" "FL_ADDR[5]" "LOCATION" "PIN_AF18"
55cmp add_assignment "hello_ucosii" "" "FL_ADDR[6]" "LOCATION" "PIN_Y16"
56cmp add_assignment "hello_ucosii" "" "FL_ADDR[7]" "LOCATION" "PIN_AA16"
57cmp add_assignment "hello_ucosii" "" "FL_ADDR[8]" "LOCATION" "PIN_AD17"
58cmp add_assignment "hello_ucosii" "" "FL_ADDR[9]" "LOCATION" "PIN_AC17"
59cmp add_assignment "hello_ucosii" "" "FL_ADDR[10]" "LOCATION" "PIN_AE17"
60cmp add_assignment "hello_ucosii" "" "FL_ADDR[11]" "LOCATION" "PIN_AF17"
61cmp add_assignment "hello_ucosii" "" "FL_ADDR[12]" "LOCATION" "PIN_W16"
62cmp add_assignment "hello_ucosii" "" "FL_ADDR[13]" "LOCATION" "PIN_W15"
63cmp add_assignment "hello_ucosii" "" "FL_ADDR[14]" "LOCATION" "PIN_AC16"
64cmp add_assignment "hello_ucosii" "" "FL_ADDR[15]" "LOCATION" "PIN_AD16"
65cmp add_assignment "hello_ucosii" "" "FL_ADDR[16]" "LOCATION" "PIN_AE16"
66cmp add_assignment "hello_ucosii" "" "FL_ADDR[17]" "LOCATION" "PIN_AC15"
67cmp add_assignment "hello_ucosii" "" "FL_ADDR[18]" "LOCATION" "PIN_AB15"
68cmp add_assignment "hello_ucosii" "" "FL_ADDR[19]" "LOCATION" "PIN_AA15"
69cmp add_assignment "hello_ucosii" "" "FL_ADDR[20]" "LOCATION" "PIN_Y15"
70cmp add_assignment "hello_ucosii" "" "FL_ADDR[21]" "LOCATION" "PIN_Y14"
71cmp add_assignment "hello_ucosii" "" "FL_DQ[0]" "LOCATION" "PIN_AD19"
72cmp add_assignment "hello_ucosii" "" "FL_DQ[1]" "LOCATION" "PIN_AC19"
73cmp add_assignment "hello_ucosii" "" "FL_DQ[2]" "LOCATION" "PIN_AF20"
74cmp add_assignment "hello_ucosii" "" "FL_DQ[3]" "LOCATION" "PIN_AE20"
75cmp add_assignment "hello_ucosii" "" "FL_DQ[4]" "LOCATION" "PIN_AB20"
76cmp add_assignment "hello_ucosii" "" "FL_DQ[5]" "LOCATION" "PIN_AC20"
77cmp add_assignment "hello_ucosii" "" "FL_DQ[6]" "LOCATION" "PIN_AF21"
78cmp add_assignment "hello_ucosii" "" "FL_DQ[7]" "LOCATION" "PIN_AE21"
79cmp add_assignment "hello_ucosii" "" "FL_OE_N" "LOCATION" "PIN_W17"
80cmp add_assignment "hello_ucosii" "" "FL_WE_N" "LOCATION" "PIN_AA17"
81cmp add_assignment "hello_ucosii" "" "FL_RST_N" "LOCATION" "PIN_AA18"


在View->Utility Windows->Tcl Console出現Tcl Console
輸入

source pins.tcl


Step 2:
將沒用到的pin設為tri-state
Menu的Assignment->Device..

ucosii29

按下Device and Pin Options..
選擇Unused Pins tab,將Reserve all unused pins設為 As input tri-stated

ucosii30

至此,Quartus II部分已經完成,可以開始編譯產生.sof檔,這需要很久的時間,完全看你CPU速度而定,編譯完成後燒將hello_ucosii.sof燒進DE2。

Nios II IDE
Step 1:

建立Hello MicroC/OS-II project
Menu:File->New->Nios II C/C++ Application

ucosii31

Step 2:
選擇Hello MicroC/OS-II template,講指定nios_ii.ptf路徑,完成按Finish

ucosii32

Step 3:
執行hello_ucosii_0
選著hello_ucosii_0 project,右鍵Run As->Nios II Hardware

ucosii33

最後執行結果,表示μC/OS-II順利執行

ucosii34

完整程式碼下載
hello_ucosii_sram_big.7z (含SDRAM_PLL.v和Reset_Delay.v)
hello_ucosii_sram_small.7z (不含SDRAM_PLL.v和Reset_Delay.v)

Conclusion
DE2和Altera原廠的版子還是有些差異,很多Altera官方的文件並不適用,在本文又再次證明了這個事實。

See Also
(原創) DE2_NIOS_Lite 1.0 (SOC) (Nios II) (SOPC Builder) (DE2)
(原創) DE2_NIOS_Lite 1.1 (SOC) (Nios II) (SOPC Builder) (μC/OS-II) (DE2)
(原創) 如何自己用SOPC Builder建立一個能在DE2上跑μC/OS-II的Nios II系統 (SRAM精簡版)? (SOC) (Quartus II) (Nios II) (SOPC Builder) (μC/OS-II) (DE2)
(原創) 如何自己用SOPC Builder建立一個能在DE2-70上跑μC/OS-II的Nios II系統? (SOC) (Nios II) (μC/OS-II) (DE2-70)

 

posted on 2008-01-10 17:13 真 OO无双 阅读(14952) 评论(106) 编辑 收藏

评论

#7楼 2008-03-20 21:33 梁勇[未注册用户]

不是。
我自己下的quartus 2软件,安装和破解后建立了一个工程,在启动sopc builder的时候就出现错误,无法进行后续工作。
是不是我的软件有问题?
谢谢前辈~~

 回复 引用   

#8楼 2008-03-21 08:20 金鱼123[未注册用户]


@真 OO无双
我用的全是7.1的......
 回复 引用   

#9楼[楼主] 2008-03-21 09:29 真 OO无双      

@梁勇
你將錯誤訊息給我看看
 回复 引用 查看   

#10楼 2008-03-29 01:13 梁勇[未注册用户]

HOHO~~
前辈,我的问题解决了,是因为在保存路径中出现了汉字的原因。。。
谢谢你哈
 回复 引用   

#11楼 2008-04-23 21:38 梁勇[未注册用户]

前辈,又遇到了一个问题,请您帮忙。。。
Using cable "USB-Blaster [USB-0]", device 1, instance 0x00.
Pausing target processor: not responding.
Resetting and trying again: FAILED.
Leaving target processor paused
调试软件是出现了上述问题,是什么错误,该如何处理?谢谢~~
 回复 引用   

#12楼[楼主] 2008-04-23 22:54 真 OO无双      

@梁勇
出現這個錯誤,有很多可能
建議你參考
http://www.cnblogs.com/oomusou/archive/2007/12/01/979534.html

若還是不能解決,可以將專案寄給我幫你看看
 回复 引用 查看   

#13楼 2008-04-30 23:34 梁勇[未注册用户]

前辈,解决了,很感谢啊~~  回复 引用   

#14楼 2008-05-03 15:29 LiangJia[未注册用户]

請問版主,我照著上面所敘述的步驟去做,做了好幾遍,使用版主所提供的程式,最後在Nios IDE 執行run的時候,也是產生如下列的訊息:
Pausing target processor: not responding.
Resetting and trying again: FAILED
Leaving target processor paused
請問這樣的結果,根據版主的經驗,是否那邊出了問題?
懇請指教...
 回复 引用   

#15楼[楼主] 2008-05-03 17:23 真 OO无双      

@LiangJia
Pausing target processor: not responding.
Resetting and trying again: FAILED
Leaving target processor paused

出現這個問題的原因非常多
請問若你使用DE2光碟的Reference Design也會出現這個訊息嗎?
 回复 引用 查看   

#16楼 2008-05-07 23:15 梁勇[未注册用户]

前辈,又遇到问题了。。。
tcl scripts无法启动是什么问题?55555。。。谢谢了。。。
 回复 引用   

#17楼 2008-05-16 14:16 阿暉[未注册用户]

Terasic本身所附的SRAM controller.....

上述的這個元件無法下載耶.....
 回复 引用   

#18楼[楼主] 2008-05-16 16:24 真 OO无双      

@阿暉
連結已修正

感謝指正
 回复 引用 查看   

#19楼 2008-06-04 11:33 关[未注册用户]

前辈,我今天在用sopc builder生成系统是出现错误,以前使用都没有问题.不知什么原因,请指点.多谢了!
# 2008.06.04 11:32:38 (*) Running Generator Program for cpu
Can't open perl script "-e": No such file or directory
Can't open perl script "-e": No such file or directory
Error in running or parsing perl

Error: Generator program
for module 'cpu' did NOT run successfully.
 回复 引用   

#20楼[楼主] 2008-06-04 14:06 真 OO无双      

@关
太詭異的錯誤訊息了,我也沒遇過

有時Quartus II的project會壞掉,你要不要試試重建一個project,然後再重新跑跑SOPC Builder?
 回复 引用 查看   

#21楼 2008-06-19 17:44 tao11[未注册用户]

博主你好,请教一下你是否使用过broland C++?最近刚开始看UCOS,但是使用这个软件编程不知道改如何查看运行结果?谢谢!  回复 引用   

#22楼[楼主] 2008-06-19 20:31 真 OO无双      

@tao11

borland c++沒用過
我就用vc++和gcc兩種
 回复 引用 查看   

#23楼 2008-06-25 01:32 bear101[未注册用户]

我照着这个方法做了, 可是总是出现下面的错误信息:
Using cable "USB-Blaster [USB-0]", device 1, instance 0x00
Pausing target processor: not responding.
Resetting and trying again: FAILED
Leaving target processor paused

请搂住看看是怎么回事.

谢谢.
 回复 引用   

#24楼[楼主] 2008-06-25 14:17 真 OO无双      

@bear101
這很多原因
你可以email給我
我幫你看看
 回复 引用 查看   

#25楼 2008-06-28 11:04 Wenjing[未注册用户]

楼主,你好!
您文章中所提到的那个Sram Controller,我在链接到的网页上没有下到,您能帮忙发到我的邮箱里吗。谢谢!
另:
我想做一个用户逻辑,就是实现两片Sram (Sopc Builder 所附的Sram)的写入和读出的乒乓操作,您能给个大概的思路吗?就是我这个模块该怎么链接到系统中吗?
谢谢!
 回复 引用   

#26楼 2008-06-29 09:14 Wenjing[未注册用户]

楼主 ,你好!
那个Sram Controller文件我已经找到了。
另:
我要实现的这个用户逻辑需要挂到Tristate Bridge 上吗?因为我要用到SOPc附着的Sram。 谢谢!
 回复 引用   

#27楼[楼主] 2008-06-29 09:40 真 OO无双      

@Wenjing
SRAM需要使用Tristate Bridge
1.因為SRAM是off-chip device,其data pins為雙向
2.可和Flash共用address和data bus, 以節省resource

詳細請參考 Quartus II Handbook Volumn 4:SOPC Builder
Ch.8 Building Memory Subsystems Using SOPC Builder的
Off-Chip SRAM and Flash Memory這一段
 回复 引用 查看   

#28楼 2008-07-16 10:12 程达[未注册用户]

請問我無法將NIOS CPU中的Exception Vector Memory的地阯設為自己添加的sram,這是為什么呢?
它的下拉框中隻有cfi
 回复 引用   

#29楼[楼主] 2008-07-16 10:22 真 OO无双      

@程达
不太了解你的意思
你可以弄張圖或將代碼寄給我看看
 回复 引用 查看   

#30楼 2008-07-25 15:37 byd[未注册用户]

请问这个怎么解决啊?
Error: Generator program
for module ''cpu'' did NOT run successfully.
generator cmd was ''d:/altera/quartus50//bin/perl561/bin/perl -Id:/altera/quartus50/sopc_builder/bin/europa -Id:/altera/quartus50/sopc_builder/bin -Id:/altera/quartus50/sopc_builder/bin/europa -Id:/altera/quartus50/sopc_builder/bin/perl_lib -I. -Id:/altera/quartus50/sopc_builder/components/altera_nios2 -Id:/altera/quartus50/sopc_builder/components/altera_nios_dev_board_stratix_1s10_es -Id:/altera/quartus50/sopc_builder/components/altera_nios_dev_board_stratix_2s60_es -Id:/altera/quartus50/sopc_builder/components/altera_nios_custom_instr_endian_converter -Id:/altera/quartus50/sopc_builder/components/altera_nios_dev_kit_stratix_edition_sram -Id:/altera/quartus50/sopc_builder/components/amd_avalon_am29lv065d_flash -Id:/altera/quartus50/sopc_builder/components/altera_sopc_builder -Id:/altera/quartus50/sopc_builder/components/altera_nios_dev_board_stratix_1s40 -Id:/altera/quartus50/sopc_builder/components/altera_nios2 -Id:/altera/quartus50/sopc_builder/components/altera_avalon_clock_adapter -Id:/altera/quartus50/sopc_builder/components/altera_avalon_spi -Id:/altera/quartus50/sopc_builder/components/altera_avalon_cfi_flash -Id:/altera/quartus50/sopc_builder/components/altera_avalon_dma -Id:/altera/quartus50/sopc_builder/components/altera_ahb_avalon_bridge -Id:/altera/quartus50/sopc_builder/components/altera_avalon_avalon_ahb_bridge -Id:/altera/quartus50/sopc_builder/components/altera_avalon_tri_state_bridge -Id:/altera/quartus50/sopc_builder/components/altera_avalon_lan91c111 -Id:/altera/quartus50/sopc_builder/components/altera_avalon_lcd_16207 -Id:/altera/quartus50/sopc_builder/components/altera_nios_dev_kit_stratix_edition_sram2 -Id:/altera/quartus50/sopc_builder/components/altera_avalon_burst_adapter -Id:/altera/quartus50/sopc_builder/components/altera_nios_multiply -Id:/altera/quartus50/sopc_builder/components/altera_nios_dev_board_cyclone_1c20 -Id:/altera/quartus50/sopc_builder/components/altera_avalon_user_defined_interface -Id:/altera/quartus50/sopc_builder/components/altera_plugs_library -Id:/altera/quartus50/sopc_builder/components/altera_avalon_cs8900 -Id:/altera/quartus50/sopc_builder/components/altera_nios_dev_board_stratix_1s10 -Id:/altera/quartus50/sopc_builder/components/altera_avalon_jtag_uart -Id:/altera/quartus50/sopc_builder/components/altera_avalon_asmi -Id:/altera/quartus50/sopc_builder/components/altera_avalon_onchip_memory -Id:/altera/quartus50/sopc_builder/components/altera_dsp_dev_board_stratix_2s60_es -Id:/altera/quartus50/sopc_builder/components/altera_avalon_onchip_memory2 -Id:/altera/quartus50/sopc_builder/components/altera_nios_custom_instr_divide -Id:/altera/quartus50/sopc_builder/components/altera_avalon_timer -Id:/altera/quartus50/sopc_builder/components/altera_avalon_new_sdram_controller -Id:/altera/quartus50/sopc_builder/components/altera_nios_custom_instr_bitswap -Id:/altera/quartus50/sopc_builder/components/altera_avalon_epcs_flash_controller -Id:/altera/quartus50/sopc_builder/components/altera_avalon_performance_counter -Id:/altera/quartus50/sopc_builder/components/a
 回复 引用   

#31楼 2008-08-05 16:49 点[未注册用户]

我今天下午重做前几天做成功的这个实验,.sof文件已经下到DE2板子里了,“hello uCOSII”工程也编译通过了,但在RUN AS-->NIOS II HARDWEAR 后,在console里出现了下面的信息,并出现预期的内容。这是怎么回事?
nios2-terminal: connected to hardware target using JTAG UART on cable
nios2-terminal: "USB-Blaster [USB-0]", device 1, instance 0
nios2-terminal: (Use the IDE stop button or Ctrl-C to terminate)

期待解答,谢谢!
 回复 引用   

#32楼 2008-08-05 17:23 点[未注册用户]

我今天下午重做前几天做成功的这个实验,.sof文件已经下到DE2板子里了,“hello uCOSII”工程也编译通过了,但在RUN AS-->NIOS II HARDWEAR 后,在console里出现了下面的信息,并出现预期的内容。我今天下午重做前几天做成功的这个实验,.sof文件已经下到DE2板子里了,“hello uCOSII”工程也编译通过了,但在RUN AS-->NIOS II HARDWEAR后,在console里出现了下面的信息,并没有出现预期的内容。 这是怎么回事?
nios2-terminal: connected to hardware target using JTAG UART on cable
nios2-terminal: "USB-Blaster [USB-0]", device 1, instance 0 nios2-terminal: "USB-Blaster [USB-0]", device 1, instance 0
nios2-terminal: (Use the IDE stop button or Ctrl-C to terminate) nios2-terminal: (Use the IDE stop button or Ctrl-C to terminate)

期待解答,谢谢!
 回复 引用   

#33楼 2008-08-15 19:38 点[未注册用户]

前辈:
你在这里NIOS II 跑100M,SDRAM 是50M且相位迟后cpu时钟60°,
在de2 的 tutorial:
Using the SDRAM Memory on Altera’s DE2 Boardwith Verilog Design
里的设置是:NIOS II 跑50M,SDRAM 是50M且相位迟后cpu时钟3ns。

请问:SDRAM的相位与cpu时钟频率是不是有关系吗?
 回复 引用   

#34楼[楼主] 2008-08-15 20:26 真 OO无双      

--引用--------------------------------------------------
点: 前辈:
你在这里NIOS II 跑100M,SDRAM 是50M且相位迟后cpu时钟60&#176;,
在de2 的 tutorial:
Using the SDRAM Memory on Altera’s DE2 Boardwith Verilog Design
里的设置是:NIOS II 跑50M,SDRAM 是50M且相位迟后cpu时钟3ns。

请问:SDRAM的相位与cpu时钟频率是不是有关系吗?
--------------------------------------------------------
相位延遲60度 = 延遲3ns
1/50MHz * 60 / 360 = 3ns
這兩個是同一件事情
所以設定是一樣的

這份tutorial比較保守,只讓Nios II跑50MHz,等於是你買了2.2GHz的Pentium,只讓他跑1.1GHz,廢了Pentium一半武功

DE2的Reference Design是友晶工程師優化過的版本,參考價值較高。
 回复 引用 查看   

#35楼 2008-08-15 21:35 点[未注册用户]

我有在看DE2的Reference Design,特别要了解SDRAM。
由于它里边的器件比较多,对整个系统的把握很有帮助。
在对系统整体的把握上,还会不断向您请教的。

假设有一个master、一个slave1,在task logic里还有GPIO 等端口,
在设置signal的时候,GPIO 的接口类型是设置成slave1,
还是设置成slave0或别的?
 回复 引用   

#36楼 2008-08-24 11:50 邹岩[未注册用户]

前辈你好:
我按照你的范例从头到尾作了一遍,感觉收获很大,首先感谢你无私的分享!
但在下遇到如下问题,请你释惑:我见设计中有Flash,所以尝试将软件代码放到Flash中执行,但是每回编译下载以后都会verify Failed ,我在你提供的代码(hello_ucosii_sram_big.7z)上测试一样不可以,我只是在Library设置中将第一个sram改成Flash ,其他的都没有改,请帮忙份洗一下,并提出改进建议
谢谢!
 回复 引用   

#37楼[楼主] 2008-08-24 12:35 真 OO无双      

--引用--------------------------------------------------
邹岩: 前辈你好:
我按照你的范例从头到尾作了一遍,感觉收获很大,首先感谢你无私的分享!
但在下遇到如下问题,请你释惑:我见设计中有Flash,所以尝试将软件代码放到Flash中执行,但是每回编译下载以后都会verify Failed ,我在你提供的代码(hello_ucosii_sram_big.7z)上测试一样不可以,我只是在Library设置中将第一个sram改成Flash ,其他的都没有改,请帮忙份洗一下,并提出改进建议
谢谢!
--------------------------------------------------------

我剛剛特別試了一下,若要讓程式跑在flash,的確會出現跟你一樣的錯誤,原因我還在查

由於flash速度慢,通常我們會將軟件跑在onchip memory, SRAM或SDRAM,這樣CPU才不會花很多時間再等memory,至於flash要怎麼使用呢?通常我們會將軟件先放在flash,但最後一樣跑在onchip memory, SRAM或SDRAM,詳請請參考
http://www.cnblogs.com/oomusou/archive/2008/08/18/nios_epcs_boot.html
 回复 引用 查看   

#38楼 2008-08-26 00:02 徐洋[未注册用户]

前辈你好,非常感谢你提供信息,我也有相似的问题,在sopc中加载了 sram后 出现 下述问题:
Using cable "USB-Blaster [USB-0]", device 1, instance 0x00
Processor is already paused
Initializing CPU cache (if present)
OK

Downloading 00880000 ( 0%)
Downloading 00890000 (97%)
Downloading 00904020 (99%)
Downloaded 66KB in 1.2s (55.0KB/s)

Verifying 00880000 ( 0%)
Verify failed between address 0x880000 and 0x88FFFF
Leaving target processor paused

address 0x880000 and 0x88FFFF 为 sram 地址, 我的sram ipcore 为 你所推荐的 de2 demo sopcbuilder 中的 ip core 。
我的版本为 8.0 sp1, 在进入 sopc 中 加载 sram 后 提示需要对 sram ip core 进行 updata ,进入 updata 界面后 提示 将 一个clk 信号 加上,按提示操作后,警告消失。 但是 编译后 在nios 中 下载程序时始终出现上述错误。 望前辈 指点。 谢谢!
附上 工程 所有文件,已发至前辈邮箱。以便前辈参考!!谢谢
 回复 引用   

#39楼[楼主] 2008-08-26 00:32 真 OO无双      

--引用--------------------------------------------------
我的版本为 8.0 sp1, 在进入 sopc 中 加载 sram 后 提示需要对 sram ip core 进行 updata ,进入 updata 界面后 提示 将 一个clk 信号 加上,按提示操作后,警告消失。 但是 编译后 在nios 中 下载程序时始终出现上述错误。 望前辈 指点。 谢谢!
附上 工程 所有文件,已发至前辈邮箱。以便前辈参考!!谢谢
--------------------------------------------------------

我還沒用8.0 sp1,所以目前無法測試
我的建議是
若你只用FPGA部分,可以大膽用Quartus II 8.0沒問題
若你有用Nios II與SOPC,建議先使用Quartus II 7.2,畢竟目前DE2與DE2-70的範例都是在Quartus II 7.2開發與測試,問題較少
 回复 引用 查看   

#40楼 2008-08-27 14:51 点[未注册用户]

这是跑100M用的PLL:
SDRAM_PLL_CPU PLL1 (.inclk0(iCLK_50),.c0(oDRAM0_CLK),.c1(CPU_CLK),.c2(CLK_25));
在DE2_70上编译是出现了下边的警告:
Warning: PLL "SDRAM_PLL_CPU:PLL1|altpll:altpll_component|pll" output port clk[0] feeds output pin "oDRAM0_CLK" via non-dedicated routing -- jitter performance depends on switching rate of other design elements. Use PLL dedicated clock outputs to ensure jitter performance
我看了niosforum的解释,还是不知道该怎么改?
前辈,你遇到这个问题了吗?帮忙解答一下吧!谢谢!
 回复 引用   

#41楼[楼主] 2008-08-27 15:01 真 OO无双      

--引用--------------------------------------------------
点: 这是跑100M用的PLL:
SDRAM_PLL_CPU PLL1 (.inclk0(iCLK_50),.c0(oDRAM0_CLK),.c1(CPU_CLK),.c2(CLK_25));
在DE2_70上编译是出现了下边的警告:
Warning: PLL &quot;SDRAM_PLL_CPU:PLL1|altpll:altpll_component|pll&quot; output port clk[0] feeds output pin &quot;oDRAM0_CLK&quot; via non-dedicated routing -- jitter performance depends on switching rate of other design elements. Use PLL dedicated clock outputs to ensure jitter performance
我看了niosforum的解释,还是不知道该怎么改?
前辈,你遇到这个问题了吗?帮忙解答一下吧!谢谢!
--------------------------------------------------------

這個警告可以不用理他
友晶的範例也是都有這個警告
我剛剛寫好的
http://www.cnblogs.com/oomusou/archive/2008/08/25/verilog_sobel_edge_detector.html
編譯也是會有這個警告
 回复 引用 查看   

#42楼 2008-08-27 17:03 点[未注册用户]

前辈,
我搭建了一个小系统,只有niosii、sdarm等必要部件,
下打印“hello world!”,

把sw的值用c读进来,在写给led显示。
我查了一个下午了,都没找到问题所在!
在IDE里:connected to hardware target using JTAG UART on cable
nios2-terminal: "USB-Blaster [USB-0]", device 1, instance 0
nios2-terminal: (Use the IDE stop button or Ctrl-C to terminate)

没有出现预期的“hello world!”
这样的问题可能有哪些原因呀?
有点着急了,可能很简单一个问题,弄了一个下午了!!

 回复 引用   

#43楼[楼主] 2008-08-27 17:12 真 OO无双      

--引用--------------------------------------------------
点: 前辈,
我搭建了一个小系统,只有niosii、sdarm等必要部件,
下打印“hello world!”,
再把sw的值用c读进来,在写给led显示。
我查了一个下午了,都没找到问题所在!
在IDE里:connected to hardware target using JTAG UART on cable
nios2-terminal: &quot;USB-Blaster [USB-0]&quot;, device 1, instance 0
nios2-terminal: (Use the IDE stop button or Ctrl-C to terminate)
没有出现预期的“hello world!”
这样的问题可能有哪些原因呀?
有点着急了,可能很简单一个问题,弄了一个下午了!!
--------------------------------------------------------

email給我幫你看看
 回复 引用 查看   

#44楼 2008-08-27 21:05 点[未注册用户]

DE2_70_NET中的I2C和DE2_CCD里的I2C一样吗?
我要用SOPC里的这个还是继续用DE2_CCD里的那个I2C?
 回复 引用   

#45楼[楼主] 2008-08-27 21:18 真 OO无双      

--引用--------------------------------------------------
点: DE2_70_NET中的I2C和DE2_CCD里的I2C一样吗?
我要用SOPC里的这个还是继续用DE2_CCD里的那个I2C?
--------------------------------------------------------

DE2_70_NET的i2c_sdat只是PIO而以
直接連到
//////////////////// I2C ////////////////////////////
I2C_SDAT,// I2C Data
oI2C_SCLK,// I2C Clock

跟DE2_CCD的i2c_config.v無關,CCD的i2c是透過GPIO
 回复 引用 查看   

#46楼 2008-08-27 21:38 点[未注册用户]

前辈,照你说的,我de2_70跑“hello world!”成功了。
接下去,我要往里边加ccd的module了。
谢谢!
 回复 引用   

#47楼 2008-08-28 10:47 点[未注册用户]

给CCD做buffer用的SDRAM的时钟,
是用SOPC里pll产生的.pll_c1_memory(oDRAM0_CLK),
还是用DE2_CCD里大sdram_pll产生的DRAM_CLK比较好啊?
我想只用一颗SDRAM存储gray数据,做buffer;
另一颗放image processing code,在SOPC 里设置。
 回复 引用   

#48楼 2008-08-28 16:05 FJL[未注册用户]

看了楼主的介绍受益匪浅,谢谢!我有一个问题想请教,就是程序放在SRAM中,是否还一定需要外部FLASH?  回复 引用   

#49楼 2008-08-28 20:49 邹岩[未注册用户]

向博主致敬,感谢无私帮助他人的精神!  回复 引用   

#50楼[楼主] 2008-08-28 22:22 真 OO无双      

--引用--------------------------------------------------
邹岩: 向博主致敬,感谢无私帮助他人的精神!
--------------------------------------------------------
DE2和Nios II都是很棒的東西,只可惜能參考的資料不多,不像ARM隨便google就一堆資料。自己學習Nios II與DE2吃過很多苦頭,所以希望能幫助各位不要走我曾經走過的冤枉路,將時間省下來放在自己想做的東西上。
 回复 引用 查看   

#51楼[楼主] 2008-08-29 00:44 真 OO无双      

--引用--------------------------------------------------
FJL: 看了楼主的介绍受益匪浅,谢谢!我有一个问题想请教,就是程序放在SRAM中,是否还一定需要外部FLASH?
--------------------------------------------------------
謝謝你的指正

可以不需要flash
這篇因為是我早期學習Nios II時,根據Nios II refernce design去改的,我先去睡了,明天再做修正

再次謝謝你的提醒
 回复 引用 查看   

#52楼[楼主] 2008-08-29 14:57 真 OO无双      

--引用--------------------------------------------------
FJL: 看了楼主的介绍受益匪浅,谢谢!我有一个问题想请教,就是程序放在SRAM中,是否还一定需要外部FLASH?
--------------------------------------------------------
謝謝你的提醒

只有SRAM的版本請參考
http://www.cnblogs.com/oomusou/archive/2008/08/29/de2_uclinux_lite.html
 回复 引用 查看   

#53楼 2008-08-29 15:01 FJL[未注册用户]

@真 OO无双
目前DE1、DE2、NIOS II参考资料都特别少,所以博主的介绍非常有意义。我用的是DE1,我想试验只用SRAM_16Bit_512K,不用FLASH,可是没有成功,很想得到博主的指教。
 回复 引用   

#54楼[楼主] 2008-08-29 15:17 真 OO无双      

--引用--------------------------------------------------
FJL: @真 OO无双
目前DE1、DE2、NIOS II参考资料都特别少,所以博主的介绍非常有意义。我用的是DE1,我想试验只用SRAM_16Bit_512K,不用FLASH,可是没有成功,很想得到博主的指教。
--------------------------------------------------------
我沒有DE1無從測試

比較保險的方法是用原來可以跑的範例,將不要的ip刪除,而不要重新開始建,除非自己已經很熟,再重頭建到尾建立Nios II

像DE2-70我剛剛拿到,我也還不敢從頭到尾自己建Nios II,也是先用CD能跑的範例去刪除不需要的ip慢慢熟悉
 回复 引用 查看   

#55楼 2008-08-29 16:05 FJL[未注册用户]

谢谢博主!
DE1的缺点是没有完整的范例,所以学起来困难一些。
昨天我看了一个资料,说RESET_VECTOR不能指向SRAM的,所以我正纳闷呢。
 回复 引用   

#56楼[楼主] 2008-08-29 16:21 真 OO无双      

--引用--------------------------------------------------
FJL: 谢谢博主!
DE1的缺点是没有完整的范例,所以学起来困难一些。
昨天我看了一个资料,说RESET_VECTOR不能指向SRAM的,所以我正纳闷呢。
--------------------------------------------------------
reset vector跟exception vector那邊的確有大學問,我也不是很清楚,
資料可以讓我看看嗎

我修正一下剛剛的發言:
reset vector跟boot copier有關係,如你將sof放在epcs,elf放在flash時,reset vector就要設定在flash

在altera文件 flash programmer有提到

http://www.altera.com/literature/ug/ug_nios2_flash_programmer.pdf
 回复 引用 查看   

#57楼 2008-08-29 17:12 FJL[未注册用户]

--引用--------------------------------------------------
reset vector跟exception vector那邊的確有大學問,我也不是很清楚,
資料可以讓我看看嗎
------------------------
Nios II的Boot过程分析
时间:2007-02-06 来源: 作者: 点击:2449 字体大小:【大 中 小】
目录
1 概述
2 几种常见的boot方式
2.1 从EPCS串行存贮器中boot
2.2 从外部CFI 并行flash中boot
3 从EPCS中boot
3.1 EPCS控制器的bootloader分析
3.2 EPCS控制器
3.3 EPCS串行存贮器件
4 从并行flash中boot
4.1 并行flash配置控制器
4.2 直接在Flash中运行程序
4.3 在RAM中运行程序
5 Bootloader解读
5.1 boot_loader.s解读
5.2 boot_loader_epcs_bits.s解读
5.3 boot_loader_cfi_bits.s解读
6 Crt0.s解读
4.3 在RAM中运行程序
程序在flash运行通常比在RAM中慢,所以有时也希望程序能够在RAM中运行。Nios II的reset地址仍然指向flash中(reset地址不能指向RAM,RAM在上电复位时还没有被初始化),在连接程序的时候可以把每个段都指定到RAM中,在SOPC builder中也可以把exception部分指定到RAM中。这样连接生成的可执行文件.elf文件就是适合在RAM中运行的程序。但在实际应用中这个程序最终存放在flash中,所以需要有一段bootloader代码,用于把flash中的程序映象拷贝到RAM中运行。工具elf2flash能够根据情况自动给你的程序在生成.flash文件时添加“程序记录”和bootloader。elf2flash判断其后随参数reset地址(就是Nios II的reset地址)和程序的入口地址是不是一样,如果一样就不添加“程序记录”和bootloader,如果不一样就添加。这个bootloader根据各个“程序记录”把程序映象拷贝到到RAM中并从RAM中执行。和EPCS一样,每个“程序记录”由两个32位的数据组成,一个是程序的长度,一个目的执行地址(即程序的运行地址)。


上面资料网上有,这里只能发一部分。
另外,不知博主前面的只用SRAM的方案,程序有没有跑一下。

 回复 引用   

#58楼 2008-08-29 17:23 FJL[未注册用户]

上面资料在:
http://www.dzkf.cn/html/EDAjishu/2007/0206/1550_2.html
 回复 引用   

#59楼[楼主] 2008-08-29 17:52 真 OO无双      

--引用--------------------------------------------------
另外,不知博主前面的只用SRAM的方案,程序有没有跑一下。
--------------------------------------------------------
有跑過確定能成功

過我沒有用epcs與flash,只是用NIOS II EDS run as hardware有成功

reset vector設在ram的最大問題,在於經過reset一斷電後,數據就不見了,這是他的致命傷,所以才說reset要設在flash

我後來修正了我在56樓曾經寫過的如下
『reset vector跟boot copier有關係,如你將sof放在epcs,elf放在flash時,reset vector就要設定在flash』

這跟你說的
『但在实际应用中这个程序最终存放在flash中,所以需要有一段bootloader代码,用于把flash中的程序映象拷贝到RAM中运行。工具elf2flash能够根据情况自动给你的程序在生成.flash文件时添加“程序记录”和bootloader。elf2flash判断其后随参数reset地址(就是Nios II的reset地址)和程序的入口地址是不是一样,如果一样就不添加“程序记录”和bootloader,如果不一样就添加。这个bootloader根据各个“程序记录”把程序映象拷贝到到RAM中并从RAM中执行。』
的觀念是一樣的

也就是說,所若要牽涉到epcs與cfi flash的話
我認為reset vector就要放在flash,因為此時elf放在flash,reset vector就該指向cfi flash,這樣再執行code時,boot copier會複製到SRAM去執行,速度較快

問題來了,為什麼在Nios II EDS run as hardware時,可以將reset vector放在SRAM呢?

因為此時我們動態的將elf上傳到SRAM上,所以沒有reset斷電的問題,

結論是
1.若你要用epcs + flash的方式boot,reset vector就要設定在flash上
2.若你只是在Nios II EDS run as Hardware,reset vector可以設定在SRAM

這是我的認知,還請指正,很高興能跟你討論reset vector的問題,讓我重新思考了這些觀念
 回复 引用 查看   

#60楼 2008-08-29 20:26 FJL[未注册用户]

谢谢博主分析,我现在思路似乎有点清楚了:

1.若要用epcs + flash的方式boot,reset vector就要設定在flash上,
2.若要用epcs 的方式boot,需要在nios II里增加一个epcs_controller,reset vector就要設定在epcs_controller上。

不过我还没有验证,还请博主多指教。



 回复 引用   

#61楼[楼主] 2008-08-29 20:41 真 OO无双      

--引用--------------------------------------------------
FJL: 谢谢博主分析,我现在思路似乎有点清楚了:

1.若要用epcs + flash的方式boot,reset vector就要設定在flash上,
2.若要用epcs 的方式boot,需要在nios II里增加一个epcs_controller,reset vector就要設定在epcs_controller上。

不过我还没有验证,还请博主多指教。
--------------------------------------------------------

目前Nios II EDS 7.2 SP3默認是使用
1.若要用epcs + flash的方式boot,reset vector就要設定在flash上
的方式
請參考
http://www.cnblogs.com/oomusou/archive/2008/08/18/nios_epcs_boot.html

 回复 引用 查看   

#62楼 2008-08-29 21:33 FJL[未注册用户]

--引用-------------------
目前Nios II EDS 7.2 SP3默認是使用
1.若要用epcs + flash的方式boot,reset vector就要設定在flash上
的方式
請參考
-----------------------------------------------
看了这个介绍很受启发,非常感谢!
我说要用epcs 的方式boot,是因为我现在正用EP2C8开发一项目,还用了EPCS4配置芯片,EPCS4相对于EP2C8容量冗余很多,可以放程序数据,这样就可以省一片FLASH了。
我刚才在DE1上验证了这种方法。
 回复 引用   

#63楼 2008-08-29 22:30 FJL[未注册用户]

博主你好,还要请教一下,我试验中还发现一个问题,就是NIOS II中设置SRAM放程序、ONCHIP_RAM放数据,程序不能正常运行,不知是为什么?  回复 引用   

#64楼 2008-09-01 13:59 FJL[未注册用户]

--引用--------------------------------------------------
FJL: 博主你好,还要请教一下,我试验中还发现一个问题,就是NIOS II中设置SRAM放程序、ONCHIP_RAM放数据,程序不能正常运行,不知是为什么?
--------------------------------------------------------
是我弄错了,实际上是可以的。
 回复 引用   

#65楼[楼主] 2008-09-01 14:11 真 OO无双      

--引用--------------------------------------------------
FJL: --引用--------------------------------------------------
FJL: 博主你好,还要请教一下,我试验中还发现一个问题,就是NIOS II中设置SRAM放程序、ONCHIP_RAM放数据,程序不能正常运行,不知是为什么?
--------------------------------------------------------
是我弄错了,实际上是可以的。
--------------------------------------------------------

恭喜你成功了
不好意思忘了回你的問題
 回复 引用 查看   

#66楼 2008-09-01 15:52 FJL[未注册用户]

--引用--------------------------------------------------
恭喜你成功了
不好意思忘了回你的問題
--------------------------------------------------------
以后还望得到你的指教!谢谢!
 回复 引用   

#67楼 2008-09-10 16:50 遠[未注册用户]

請問您有用過DE2_70的板子來建立uC/OS-II的NIOS II系統嗎?
我有試著用SSRAM 但失敗了, 所以就來請教你看看 ,還是說必須要有像DE2的
SRAM_16Bit_512K的這個模組才能跑OS,那這個模組能放進DE2_70內使用嗎?
 回复 引用   

#68楼[楼主] 2008-09-10 20:26 真 OO无双      

--引用--------------------------------------------------
遠: 請問您有用過DE2_70的板子來建立uC/OS-II的NIOS II系統嗎?
我有試著用SSRAM 但失敗了, 所以就來請教你看看 ,還是說必須要有像DE2的
SRAM_16Bit_512K的這個模組才能跑OS,那這個模組能放進DE2_70內使用嗎?
--------------------------------------------------------

我剛剛用http://www.cnblogs.com/oomusou/archive/2008/08/30/de2_70_reference_design.html
在DE2-70跑了MicroC/OS-Tutorial
跑在SSRAM上
可以成功

若你要我跑的程式,你email給我,我再寄給你
 回复 引用 查看   

#69楼 2008-09-10 23:23 遠[未注册用户]

麻煩你email給我 真的很謝謝你 有你的程式輔助 我想會更容易了解  回复 引用   

#70楼[楼主] 2008-09-11 12:06 真 OO无双      

--引用--------------------------------------------------
遠: 麻煩你email給我 真的很謝謝你 有你的程式輔助 我想會更容易了解
--------------------------------------------------------

寄給你了
若有問題再一起討論
 回复 引用 查看   

#71楼 2008-09-27 23:13 张建伟[未注册用户]

前辈,那个SRAM Controler 我下不了,您能把那个发到我邮箱吗?
Hello_Doggy_Poo@live.cn
谢谢啦~!
 回复 引用   

#72楼[楼主] 2008-09-27 23:58 真 OO无双      

--引用--------------------------------------------------
张建伟: 前辈,那个SRAM Controler 我下不了,您能把那个发到我邮箱吗?
Hello_Doggy_Poo@live.cn
谢谢啦~!
--------------------------------------------------------

寄給你了
若有問題再一起討論
 回复 引用 查看   

#73楼 2008-09-28 01:19 张建伟[未注册用户]

我照着您的顺序一步一步的做,
当我复制
\DE2_demonstrations\SOPC_Builder\Component\SRAM_16Bit_512K

C:\DE2\hello_ucosii\
在重启SOPC Builder 的时候找不到Terasic 的目录,请问是什么原因?
C:\DE2 的文件以前是不是还有别的东西呢?
THank u.......
 回复 引用   

#74楼[楼主] 2008-09-28 01:37 真 OO无双      

@张建伟
--引用--------------------------------------------------
张建伟: 我照着您的顺序一步一步的做,
当我复制
\DE2_demonstrations\SOPC_Builder\Component\SRAM_16Bit_512K

C:\DE2\hello_ucosii\
在重启SOPC Builder 的时候找不到Terasic 的目录,请问是什么原因?
C:\DE2 的文件以前是不是还有别的东西呢?
THank u.......

--------------------------------------------------------

我這篇是Quartus II 7.2 SP1的
Quartus II 8.0會有些出入

建議你可以參考這篇的方式
http://www.cnblogs.com/oomusou/archive/2008/08/23/de2_nios_lite11.html
 回复 引用 查看   

#75楼 2008-10-02 16:53 馬路上的人[未注册用户]

--引用--------------------------------------------------
张建伟: 我照着您的顺序一步一步的做,
当我复制
\DE2_demonstrations\SOPC_Builder\Component\SRAM_16Bit_512K

C:\DE2\hello_ucosii\
在重启SOPC Builder 的时候找不到Terasic 的目录,请问是什么原因?
C:\DE2 的文件以前是不是还有别的东西呢?
THank u.......

--------------------------------------------------------
應該是要把SRAM_16Bit_512K這個元件資料夾放在Quartus專案目錄底下
EX.我專案目錄D:\test\
所以就放到D:\test\SRAM_16Bit_512K
或者D:\test\IP\SRAM_16Bit_512K 應該也可以
 回复 引用   

#76楼 2008-10-11 15:42 vincent_li[未注册用户]

楼主,你好!!
我按照你上面的操作,但到了第六步的时候却没有出现cpu_instrcution_master,cpu_data_master的错误,而一直都是cfi_flash,tristate_bridge的错误.
请问这是什么问题啊??
thank you!!
 回复 引用   

#77楼[楼主] 2008-10-11 15:51 真 OO无双      

--引用--------------------------------------------------
vincent_li: 楼主,你好!!
我按照你上面的操作,但到了第六步的时候却没有出现cpu_instrcution_master,cpu_data_master的错误,而一直都是cfi_flash,tristate_bridge的错误.
请问这是什么问题啊??
thank you!!
--------------------------------------------------------

SOPC Builder不同的版本,訊息可能不太一樣
畢竟Quartus II改最多的就是SOPC部分

你是用哪個版本?我這篇是用Quartus II 7.2 SP1做的
 回复 引用 查看   

#78楼 2008-10-11 16:00 vincent_li[未注册用户]

楼主,我已经解决了!!  回复 引用   

#79楼 2008-10-12 22:04 sbqakqux[未注册用户]

我按照你上面的操作来弄,但在quartus II 7.2中生成的sof文件,并不是hello_ucosii.sof,而是hello_ucosii_time_limited.sof.
请问这是什么问题啊??
先谢谢楼主了!!
 回复 引用   

#80楼[楼主] 2008-10-12 22:44 真 OO无双      

--引用--------------------------------------------------
sbqakqux: 我按照你上面的操作来弄,但在quartus II 7.2中生成的sof文件,并不是hello_ucosii.sof,而是hello_ucosii_time_limited.sof.
请问这是什么问题啊??
先谢谢楼主了!!
--------------------------------------------------------

這表示沒有破解成功
請參考
http://www.cnblogs.com/oomusou/archive/2008/02/03/1063978.html
http://www.cnblogs.com/oomusou/archive/2008/06/25/quartus_ii_72_sp3_crack.html
 回复 引用 查看   

#81楼 2008-10-13 18:02 4ace[未注册用户]

你好。我想问下SOPC Builder所附的SRAM controller与Terasic本身所附的SRAM controller有什么不同?为什么本文要选Terasic本身所附的SRAM controller?  回复 引用   

#82楼[楼主] 2008-10-13 20:53 真 OO无双      

--引用--------------------------------------------------
4ace: 你好。我想问下SOPC Builder所附的SRAM controller与Terasic本身所附的SRAM controller有什么不同?为什么本文要选Terasic本身所附的SRAM controller?
--------------------------------------------------------

這我也不清楚
但只知道用Altera的SRAM controller會不能動
 回复 引用 查看   

#83楼 2008-10-15 09:30 4ace[未注册用户]

--引用--------------------------------------------------
4ace: 你好。我想问下SOPC Builder所附的SRAM controller与Terasic本身所附的SRAM controller有什么不同?为什么本文要选Terasic本身所附的SRAM controller?
--------------------------------------------------------

我问了我们一个同学他是这样解释这个问题的:Terasic本身所附的SRAM controller是针对DE2(Cyclone II EP2C35F627C6)上的SRAM的;而SOPC Builder所附的SRAM controller是针对其他型号板子上的SRAM的。所以在这篇文章中我们用的板子是DE2(Cyclone II EP2C35F627C6),相应的SRAM controller就只能用Terasic提供的了。
 回复 引用   

#84楼[楼主] 2008-10-15 09:37 真 OO无双      

--引用--------------------------------------------------
我问了我们一个同学他是这样解释这个问题的:Terasic本身所附的SRAM controller是针对DE2(Cyclone II EP2C35F627C6)上的SRAM的;而SOPC Builder所附的SRAM controller是针对其他型号板子上的SRAM的。所以在这篇文章中我们用的板子是DE2(Cyclone II EP2C35F627C6),相应的SRAM controller就只能用Terasic提供的了。
--------------------------------------------------------

是的,就是這樣子
 回复 引用 查看   

#85楼 2008-10-18 17:19 wjtliso[未注册用户]

樓主,我有一個問題。
我用的板子是革新的ep2c35,我編譯了72eds裡面example的2c35standard,然後用它來建立eds裡面的工程。我建立的是hello_nios ii,所有過程結束后,用run as --nios ii hardware時,最後出現的是:
nios2-terminal: connected to hardware target using JTAG UART on cable
nios2-terminal: "Nios II Evaluation Board [USB-0]", device 1, instance 0
nios2-terminal: (Use the IDE stop button or Ctrl-C to terminate)
但是之後就停止了,沒有出結果。
請問這是什麽原因呢?
 回复 引用   

#86楼[楼主] 2008-10-18 17:31 真 OO无双      

--引用--------------------------------------------------
wjtliso: 樓主,我有一個問題。
我用的板子是革新的ep2c35,我編譯了72eds裡面example的2c35standard,然後用它來建立eds裡面的工程。我建立的是hello_nios ii,所有過程結束后,用run as --nios ii hardware時,最後出現的是:
nios2-terminal: connected to hardware target using JTAG UART on cable
nios2-terminal: &quot;Nios II Evaluation Board [USB-0]&quot;, device 1, instance 0
nios2-terminal: (Use the IDE stop button or Ctrl-C to terminate)
但是之後就停止了,沒有出結果。
請問這是什麽原因呢?
--------------------------------------------------------

Altera的ep2c35是給Altera自己的版子用的
我用DE2也無法使用Altera提供的ep2c35執行

你看看你的版子有沒有提供NIOS II的reference design
不然就得自己調試,不過這就不太容易了
 回复 引用 查看   

#87楼 2008-10-18 19:38 wjtliso[未注册用户]

问题解决了!
一开始我在sdram运行,就出现上述错误。
后来我改用sram,然后就跑出来了!
谢谢楼主啊!
 回复 引用   

#88楼[楼主] 2008-10-18 19:58 真 OO无双      

--引用--------------------------------------------------
wjtliso: 问题解决了!
一开始我在sdram运行,就出现上述错误。
后来我改用sram,然后就跑出来了!
谢谢楼主啊!
--------------------------------------------------------

那表示你的SDRAM配置有問題,導致Nios II無法跑在SDRAM,只能跑在SRAM
SDRAM通常是clock沒有弄好,因為clock skew的問題,所以clock必須有些相位移,你可以注意一下
 回复 引用 查看   

#89楼 2008-10-22 10:46 wjtliso[未注册用户]

楼主的意思是不是应该修改一下我硬件的ptf文件,改正sdram的错误?应该怎么做?抱歉,因为我对如何去搭平台还是不熟悉,用的都是原厂给的standard。  回复 引用   

#90楼[楼主] 2008-10-22 11:08 真 OO无双      

--引用--------------------------------------------------
wjtliso: 楼主的意思是不是应该修改一下我硬件的ptf文件,改正sdram的错误?应该怎么做?抱歉,因为我对如何去搭平台还是不熟悉,用的都是原厂给的standard。
--------------------------------------------------------

在我上面的code

hello_ucosii.v第58行

SDRAM_PLL PLL1 (.inclk0(CLOCK_50),.c0(DRAM_CLK),.c1(CPU_CLK),.c2(CLK_25));

有特別用pll產生SDRAM需要的clock

若DRAM_CLK不正確,就會無法使用SDRAM
 回复 引用 查看   

#91楼 2008-12-24 10:31 TommyKakashi[未注册用户]

博主你好,我需要你文中提到的Terasic本身所附的SRAM controller。
可是你提供的下載已經失效了,能否發送到我的信箱中或者儘快修復,讓我能夠繼續下去,謝謝。
 回复 引用   

#92楼[楼主] 2008-12-24 15:34 真 OO无双      

--引用--------------------------------------------------
TommyKakashi: 博主你好,我需要你文中提到的Terasic本身所附的SRAM controller。
可是你提供的下載已經失效了,能否發送到我的信箱中或者儘快修復,讓我能夠繼續下去,謝謝。
--------------------------------------------------------

已經加上連結
或請http://www.blogjava.net/Files/oomusou/SRAM_16Bit_512K.7z
下載
 回复 引用 查看   

#93楼 2008-12-26 20:35 王伟能[未注册用户]

前辈你好!我是刚开始学sopc builder,看了您的这篇博客,收获很多。我也按照您的实例试了一下,但是到“按下Generate開始產生硬體”时,出现报错,系统生成失败。
报错信息:
cpu_vector/interrupt_vector requires a master of type nios_custom_instruction;
cpu_bitswap/s1 requires a master of type nios_custom_instruction;
请问只是什么原因,怎么改?
我用的Quartus II 7.2
 回复 引用   

#94楼 2009-04-28 14:52 xhd

你好,我按你的方法去做了,我用的是8.0的QII软件,但是在sopc Builder界面中点开terasic technologies inc后,再双击SRAM_16bit_512K时,老是一个进度条在跑,出不来,也就是加不进去,该怎么办,前面的点也是灰色的,不是绿色的.  回复 引用   

#95楼[楼主] 2009-04-28 15:40 真 OO无双      

--引用--------------------------------------------------
xhd: 你好,我按你的方法去做了,我用的是8.0的QII软件,但是在sopc Builder界面中点开terasic technologies inc后,再双击SRAM_16bit_512K时,老是一个进度条在跑,出不来,也就是加不进去,该怎么办,前面的点也是灰色的,不是绿色的.
--------------------------------------------------------

因為Quartus II版本的問題
我用Quartus II 8.1也是會這樣
因為當初這個SRAM_16bit_512K是使用較早的Avalon Bus spec寫的
所以在Quartus II新的版本會有問題
這個問題也出在DE2 CD的其他IP

有幾個建議的方法
1.合本文一樣使用Quartus II 7.2,也就是DE2範例所搭配的Quartus II版本
2.使用新的Altera University Program IP Core,這有for Quartus II 8.x

SOPC是Altera一直在改的部份,所以相容性比較有問題
較保守的方式就是和DE2 CD範例使用相同的Quartus II版本
可以免除這種版本的問題
 回复 引用 查看   

#96楼 2009-05-09 17:02 frankiecoco

At first thank you for your contribution master.

I am trying to run "hello microC-OS II" with a 18kb on chip memory, i have changed "System Library Properties", ticked all the boxes to redudce the memory needed such as "small C libary" etc. also disable the OS codes in "RTOS" library settings, dispite that there are error of disabled too much of the OS codes, i am still short for memory to run the "hello microC-OS II" , mentioning that on the Micrium website saying that the microC-OS II can run on a 2kb memory, just asking if anyone or the master knows any way to configure this on NIOS 2 or using Quartus 8.0.

i am using a cyclone 2 ep2c20 by the way.
if anyone can give any advice, thank you very much

i am not using DE2, this FPGA is on a custom mircocontrollor, it does not have any off chip memory at all.
 回复 引用   

#97楼[楼主] 2009-05-11 01:38 真 OO无双      

--引用--------------------------------------------------
frankiecoco: At first thank you for your contribution master.

I am trying to run &quot;hello microC-OS II&quot; with a 18kb on chip memory, i have changed &quot;System Library Properties&quot;, ticked all the boxes to redudce the memory needed such as &quot;small C libary&quot; etc. also disable the OS codes in &quot;RTOS&quot; library settings, dispite that there are error of disabled too much of the OS codes, i am still short for memory to run the &quot;hello microC-OS II&quot; , mentioning that on the Micrium website saying that the microC-OS II can run on a 2kb memory, just asking if anyone or the master knows any way to configure this on NIOS 2 or using Quartus 8.0.

i am using a cyclone 2 ep2c20 by the way.
if anyone can give any advice, thank you very much

i am not using DE2, this FPGA is on a custom mircocontrollor, it does not have any off chip memory at all.
--------------------------------------------------------

please reference
http://www.cnblogs.com/oomusou/archive/2008/01/20/1046257.html

maybe it can help you.
 回复 引用 查看   

#98楼 2009-05-31 15:04 Rihong

我在FPGA内申请了一片RAM,向博主请教,我怎样用Nios向这片RAM写数据.谢谢博主指点!  回复 引用   

#99楼 2009-07-13 10:55 yeyan1[未注册用户]

我在插入新组件的时候,就出现Edit Module 而且等待时间很长,并且关不了。是什么原因呢?期待楼主回答。  回复 引用   

#100楼 2009-07-21 10:46 learnergo      

你好,前辈,我想问下,我在做到编译那一步的时候,出现了Top-leve1 design entity"hello_ucoiss"is undfined 这个错误 是怎么回事呢?谢谢了  回复 引用 查看   

#101楼 2009-07-30 00:22 沈沈[未注册用户]

前辈 你好 按照你的指导 我出的结果是只执行一个任务:
Hello from task2
Hello from task2
Hello from task2
Hello from task2
Hello from task2
Hello from task2
Hello from task2
Hello from task2
Hello from task2
Hello from task2
Hello from task2
Hello from task2
Hello from task2
Hello from task2
Hello from task2
Hello from task2
Hello from task2
Hello from task2
Hello from task2
Hello from task2
Hello from task2
Hello from task2
Hello from task2
Hello from task2
Hello from task2
Hello from task2


我的qq:122283528 欢迎志同道合的朋友一起研究
 回复 引用   

#102楼 2009-08-23 16:12 Huanghui[未注册用户]

前辈 您好!
请问那个SRAM Controler可以直接用SOPC Builder里面附带的吗
还有SRAM和Flash如何共用地址线和数据线呢
我正在学习这个SOPC 有很多问题想向前辈您请教
如果前辈方便 可以留个您的联系方式吗 邮箱或QQ什么的
谢谢了!

 回复 引用   

#103楼 2009-08-24 10:06 Huanghui[未注册用户]

前辈 您好!
我还想请问一下 关于读写Flash控制器的问题
存储器我只添加了on-chip RAM 和 Flash Memory
如果要对片外的Flash进行读写操作 我的Reset Adress和Exeption Adress 该如何设置 还有IDE中 .text 、 .rodata 和.rwdata又该如何设置呢?
我还有一个问题一直没解决 就是JTAG Uart的问题 为了方便程序调试
希望能在控制台显示文字 我加了JTAG Uart和Interval timer 但是在控制台一点效果都没有 请前辈指点 我的stdout stderr 和 stdin都设成了JTAG Uart 好像System clock timer和Timestamp timer 不能同时设成Interval timer 为什么? 该怎样设呢 如果要在控制台显示文字是否只需要添加这两个器件呢??
请前辈指点 非常感谢!!
 回复 引用   

#104楼 2009-11-06 15:41 sulumi[未注册用户]

如果想把CPU從單核心變成多核心請問需要新增修改哪些部份?  回复 引用   

#105楼 2010-06-12 09:02 tangde      

请问大家 要想在console控制台上显示文字,就一定要加上JTAG UART么? 那加上JTAG UART还有没有其它的作用呢?  回复 引用 查看   

#106楼 2011-04-13 11:01 wakering      

多向楼主学习!  回复 引用 查看   

评论共2页: 上一页 1 2 

导航

公告

emblem-2010

first2009-011

我是一個小小的數位IC工程師,從事SOC IP開發,業餘則喜歡研究FPGA、Embedded System、OS、MFC、NET與OOP相關技術。我並不是靠寫Blog或寫書維生,只是記下來怕自己忘記,所以不加任何廣告。所有文章與程式碼歡迎轉載使用。

昵称:真 OO无双
园龄:5年4个月
粉丝:281
关注:0

随笔分类(2100)