第一篇:集成實(shí)驗(yàn)VCS實(shí)驗(yàn)報(bào)告
武漢大學(xué) 電工電子實(shí)驗(yàn)教學(xué)示范中心 集成電路設(shè)計(jì)實(shí)驗(yàn)實(shí)驗(yàn)報(bào)告 電子信息 學(xué)院
電子信息工程
專業(yè)
XXXX
年 X 月 XX 日
實(shí)驗(yàn)名稱 8 位累加器 VCS CLI 仿真驗(yàn)證(實(shí)驗(yàn)三)指導(dǎo)教師
姓名
年級(jí) 級(jí) 學(xué)號(hào)
成績(jī)
一、預(yù)習(xí)部分 1. 實(shí)驗(yàn)?zāi)康模A(yù)期成果)
2. 實(shí)驗(yàn)基本原理(概要)
3. 主要儀器設(shè)備(實(shí)驗(yàn)條件,含必要的元器件、工具)
一、實(shí)驗(yàn)?zāi)康?掌握集成電路計(jì)算機(jī)設(shè)計(jì)工具驗(yàn)證仿真工具 VCS(Verilog Compiled Simulator)的基本操作命令行命令,從集成電路 Verilog 設(shè)計(jì)到 VCS 驗(yàn)證的基本流程;掌握利用命令行來(lái)實(shí)現(xiàn)對(duì) Verilog 設(shè)計(jì)的調(diào)試與分析。
二、實(shí)驗(yàn)基本原理
1.VCS 是編譯型 Verilog 模擬器,它完全支持 OVI 標(biāo)準(zhǔn)的 cVerilog HDL 語(yǔ)言、PLI 和 SDF。VCS 首先會(huì)讀入 Verilg 的源文件,檢查語(yǔ)法及語(yǔ)言結(jié)構(gòu)錯(cuò)誤,即Compiler;然后結(jié)合測(cè)試模塊,進(jìn)行時(shí)序的仿真,即 Simulator;最后根據(jù)時(shí)序圖進(jìn)行調(diào)試,修改源程序,即 Debugger。
2.本次實(shí)驗(yàn)中需要用到的一些基本命令有:
>ls-顯示文件名 >cd-轉(zhuǎn)換目錄 >cd/../../-退出兩層 >more-以分頁(yè)方式查看文件內(nèi)容 >pwd-顯示當(dāng)前路徑 > vcs source_file [complie_time_options] 編譯 verilog 文件成為一個(gè)可執(zhí)行的二進(jìn)制文件,source_file 指所有用 Verilog 編寫的待測(cè)文件。
>simv [run_time_options] 運(yùn)行可執(zhí)行文件 > vcs source_files –R 單命令行方式,-R 表示編譯后立即執(zhí)行。
3.VCS 調(diào)試的基本方式 a.Verilog SystemTask calls 主要是將一些函數(shù)加到測(cè)試模塊中,從而實(shí)現(xiàn)相應(yīng)的操作。
b.CLI 調(diào)試,實(shí)際上是用命令行的方式來(lái)進(jìn)行調(diào)試。
c.VirSim 進(jìn)行仿真、驗(yàn)證與調(diào)試。
4.8 位累加器邏輯框圖
圖1
5.實(shí)驗(yàn)設(shè)備與軟件平臺(tái) UNIX 服務(wù)器,unix 工作站及 Synopsys VCS。
二、實(shí)驗(yàn)操作部分 1. 實(shí)驗(yàn)數(shù)據(jù)、表格及數(shù)據(jù)處理(綜合結(jié)果概要、仿真波形圖、時(shí)序分析結(jié)果、signalTAPII 結(jié)果等)
2. 實(shí)驗(yàn)操作過(guò)程(可用圖表示)
3. 結(jié)論
三、實(shí)驗(yàn)操作過(guò)程 1.VCS 的編譯 此步驟實(shí)驗(yàn)內(nèi)容參照實(shí)驗(yàn)講義進(jìn)行,略過(guò)。
2.利用 Verilog SystemTask Calls 進(jìn)行調(diào)試。
(1)在控制臺(tái)下鍵入:cd../../lab2/parta 進(jìn)入 lab2 的 parta 部分, shell> vcs –f adder.f –R,進(jìn)行 8 位的加法運(yùn)算,但會(huì)出現(xiàn)如下的顯示:
圖 2 這說(shuō)明在源代碼中存在錯(cuò)誤,接下來(lái)要做的就是把錯(cuò)誤找出來(lái)。
(2)shell>vi addertb.v 進(jìn)入 vi 編輯器對(duì) addertb.v 文件修改。首先對(duì) add8 的模塊進(jìn)行檢測(cè),如圖所示在相應(yīng)部分添加畫圈部分代碼。
圖 3 其中 add8(u1)是指 8 位加法器的低四位相加模塊。加入后保存文件,shell> vcs –f adder.f –R 重新編譯文件,會(huì)有如下的顯示:
圖 4
(3)因此在 add8(u1)中存在錯(cuò)誤。為了進(jìn)一步的檢測(cè),如圖所示在相應(yīng)部分繼續(xù)添加畫圈部分代碼。
圖 5 為了設(shè)置斷點(diǎn)將$finish 改為$stop,這樣每當(dāng)發(fā)現(xiàn)一個(gè)錯(cuò)誤的時(shí)候,結(jié)果都會(huì)由$display 函數(shù)顯示出來(lái),同時(shí)仿真過(guò)程會(huì)停在出錯(cuò)的地方。shell> vcs –f adder.f –R 重新編譯文件,VCS 在遇到$stop 后會(huì)停止仿真,同時(shí)進(jìn)入 CLI 的調(diào)試階段。
圖 6(4)可以看到在低位的相加上結(jié)果有誤。為了確定最終的錯(cuò)誤位置還要繼續(xù)下一組數(shù)據(jù)的相加,在 CL 下多次輸入”.”,最后可確定問(wèn)題出在 fa 模塊上。
圖 7(5)Cl> quit,退出 CLI 模式。Shell>vi fa.v 進(jìn)入 vi 編輯器對(duì) fa.v 文件修改,問(wèn)題出在數(shù)據(jù)相加時(shí)沒(méi)有將 cin 位加上。
圖 8
(6)修改后重新編譯,然后運(yùn)行程序。shell> simv +monitoroff,此時(shí)可以看到無(wú)錯(cuò)誤提示,即運(yùn)算正確。
圖 9(7)利用+monitoroff 可以在運(yùn)行程序時(shí)跳過(guò)所有的$monitor 命令,從而加快運(yùn)行速度。
圖 10
3.利用 VCS CLI 進(jìn)行調(diào)試(1)> cd../partb 進(jìn)入 lab2 的 partb。再一次運(yùn)行程序,看是否運(yùn)行正確。shell> vcs –f adder.f –R,得到如下結(jié)果:
圖 11
為了可以解決出現(xiàn)的問(wèn)題,這時(shí)需要在 addertb.v 中設(shè)置斷點(diǎn),把$finish 改為$stop,如下:
圖 12
(2)接著編譯并啟動(dòng) CLI 界面。shell> vcs –f adder.f +cli+3 –R –s –l sim.log,-s 可以啟動(dòng) CLI 并且將仿真時(shí)間停在 0 時(shí)刻,-l 可以將所寫過(guò)的命令記錄下來(lái)。cli_0> ?可以顯示所在的位置,即位于模塊的哪一層。cli_1> scope,cli_2>.程序開(kāi)始運(yùn)行,有如下的顯示。cli_3> show variables,會(huì)顯示所有的變量。cli_4> print a_test a_test b_test cin_test cout_test sum_test 可顯示所有的變量值。
圖 13
(3)可見(jiàn) sum_test 的結(jié)果是不正確的,cli_5>scope u1 可以進(jìn)入 u1(add8)模塊。cli_6> show variables。cli_7> alias praves print a b sum sum_0 sum_1 cin c4。為了方便可以利用 alias 命令新設(shè)立一個(gè)命令 praves,用來(lái)顯示變量值,cli_8> prvaves。
圖 14
(4)可見(jiàn)問(wèn)題出在高四位,為了確定錯(cuò)誤需要檢查源文件,另外開(kāi)一個(gè) UNIX 的控制臺(tái)。在 add8.v 中可以看到,在對(duì)結(jié)果的高四位以及輸出進(jìn)位的賦值均出現(xiàn)了錯(cuò)誤。
回到 CLI 環(huán)境下,進(jìn)行如下的操作:cli_9> print zero_add_cin one_add_cin,可得:
zero_add_cin: 0 one_add_cin:1。對(duì)上述變量強(qiáng)制賦值,如下:
cli_10> force zero_add_cin = 1 cli_11> force one_add_cin =0
圖 15
(5)運(yùn)用設(shè)定好的命令 praves 來(lái)顯示變量值,cli_12> pravas zero_add_cin one_add_cin,輸出顯示命令錯(cuò)誤。cli_13> tbreak #10,cli_14>.,cli_15> praves, 輸出顯示命令錯(cuò)誤。cli_16> print a_test a_test b_test cin_test cout_test sum_test,如下所示:
圖 16
結(jié)果正確,現(xiàn)在 add8 模塊中設(shè)置斷點(diǎn),以變量 c4 的上升沿位為標(biāo)志。cli_17> always @posedge u1.c4,cli_18>.可以發(fā)現(xiàn)從 60 時(shí)刻到 26400 時(shí)刻均沒(méi)有出現(xiàn)錯(cuò)誤。cli_19> print a_test a_test b_test cin_test cout_test sum_test,顯示變量值:
a_test:01 b_test:08 cin_test:0 cout_test:0 sum_test:08 結(jié)果正確,但由于仿真運(yùn)行到斷點(diǎn)出就停止了,那么斷點(diǎn)后出現(xiàn)的錯(cuò)誤就無(wú)法檢測(cè) 到,所以需要去除斷點(diǎn)的限制。cli_20> tbreak #1,cli_21>.,cli_22> show break 會(huì)顯示如圖所示斷點(diǎn)。
(6)cli_24> delete 2,cli_25>.則運(yùn)行后成功編譯如下圖。
圖 17(7)可以將上述命令寫在一個(gè)約束文件(script file)中,然后直接運(yùn)行。這里已有一個(gè)test.s 的文件,下面來(lái)看如何運(yùn)行。
(8)cli_26> $reset,cli_30> source test.s,圖 18(9)cli_31> prtb,cli_32>.可以看到運(yùn)行無(wú)誤,此時(shí)結(jié)束仿真,退出 CLI,檢查 log 文件,可以看到所有的操作都被記錄在文件中。cli_33> $finish。
圖 19
圖 20(10)shell> more sim.log 可以看到所有命令均被記錄,由此也可以完成約束文件的建立。
三、實(shí)驗(yàn)效果分析(與預(yù)期結(jié)果的比較 ,實(shí)驗(yàn)中發(fā)現(xiàn)的問(wèn)題。包括儀器設(shè)備等使用效果)
四、實(shí)驗(yàn)思考題 1. 集成電路從設(shè)計(jì)到驗(yàn)證的基本流程? 答:集成電路設(shè)計(jì)的基本流程是:(1)功能設(shè)計(jì)階段,(2)設(shè)計(jì)描述和行為級(jí)驗(yàn)證,(3)邏輯綜合,(4)門級(jí)驗(yàn)證,(5)布局和布線。
驗(yàn)證過(guò)程:(1)用 VCS 編譯 Verilog 源程序,(2)執(zhí)行 simv 進(jìn)行仿真驗(yàn)證,(3)在錯(cuò)誤點(diǎn)停下,(4)確定錯(cuò)誤并改正(4)編譯仿真確認(rèn)修改是否正確(5)解釋結(jié)果。
2. VCS 對(duì) verilog 模型進(jìn)行仿真包括哪兩個(gè)步驟? 答:VCS 對(duì) verilog 模型進(jìn)行仿真包括兩個(gè)步驟:(1)編譯 verilog 文件成為一個(gè)可執(zhí)行的二進(jìn)制文件,命令為:> vcs source_file [complie_time_options];(2)運(yùn)行可執(zhí)行文件,>simv [run_time_options] 3. VCS 驗(yàn)證各選項(xiàng)參數(shù)的含義? 答:(1)-y lib_dir 在 lib_dir 的路徑下的所有文件中尋找未被編譯的相關(guān)模塊,(2)+libext+lib_ext 在 lib_dir 的路徑下使用文件的擴(kuò)展名 lib_ext 來(lái)尋找文件,(3)-s 在 0 時(shí)刻停止仿真,(4)$stop 采用斷點(diǎn)的方式停止仿真,$finish 終止仿真過(guò)程,$display 將數(shù)據(jù)或消息等顯示在控制臺(tái)上,(5)? 顯示所在的位置,即位于模塊的哪一層,(6)print 顯示所有的變量值,(7)scope 進(jìn)入指定模塊。
4. 在 lab1 中,能不能在 adder.f 文件中加入-R? 答:不能。-R 的作用是顯示文件及所有子目錄,而 adder.f 為自定義格式,沒(méi)有其他文件或子目錄可以顯示。
5. 在 lab1 中,是否可以用-v 代替-y?如果可以該怎樣進(jìn)行? 答:在 lab1 中,可以用-v 代替-y,將命令行 shell> vcs addertb.v add8.v –y../../lib +libext+.v –R
改為:shell> vcs addertb.v add8.v –v vcs 因?yàn)?partb 文件夾下僅有兩個(gè)文件:addertb.v,add8.v,其余的模塊放在庫(kù)文件的根目錄下。
-v lib_file 在文件 lib_file 中尋找未被編譯的相關(guān)模塊。
-y lib_dir 在 lib_dir 的路徑下的所有文件中尋找未被編譯的相關(guān)模塊。
四、源代碼(僅記錄自己設(shè)計(jì)的 ,或者針對(duì)實(shí)驗(yàn)資料修改的部分)
module fa(a, b, cin, sum, cout);input a, b, cin;output sum, cout;assign {cout, sum} = a + b+cin;endmodule
教
師
評(píng)
語(yǔ)
第二篇:實(shí)驗(yàn)動(dòng)物學(xué)實(shí)驗(yàn)報(bào)告
實(shí)驗(yàn)動(dòng)物學(xué)實(shí)驗(yàn)報(bào)告
一、實(shí)驗(yàn)動(dòng)物:小鼠
二、操作流程:抓取,固定,編號(hào),給藥,取血,麻醉,絕育,解剖。
三、具體操作
1、抓取:抓取小鼠時(shí),右手抓住小鼠尾巴,不要過(guò)于用力,以免驚嚇小鼠。左手從小鼠身體后部向前抓(以免小鼠向后縮咬傷自己),抓住小鼠頸部。固定住小鼠后,將小鼠皮膚往上抓,盡量將小鼠背部皮膚抓住。左手將小鼠腹部朝向自己,把小鼠尾巴用左手無(wú)名指和小指夾住,這時(shí)小鼠腹部皮膚緊繃,不能動(dòng)彈。
2、固定: 通常使用固定器進(jìn)行固定。將固定器擰開(kāi)后,抓住小鼠尾巴,使其鉆入固定器中,再將擰下的固定器部分裝好,使小鼠尾部露出,再將可旋轉(zhuǎn)的鐵片固定住即可進(jìn)行后續(xù)實(shí)驗(yàn)。
3、編號(hào):編號(hào)方式有兩種:①剪腳趾編號(hào):把小鼠腹面朝上,在下的腳趾從左至右依次編為1~10號(hào),剪10號(hào)腳趾加1~9號(hào)腳趾依次編為11~19號(hào),在上的腳趾依次編為20,30,40,50,60,70,80,90號(hào),其余編號(hào)與11~19號(hào)類似。②打耳釘編號(hào):耳釘上均有唯一編號(hào),通過(guò)使用耳釘鉗將耳釘打在小鼠耳朵上即可。實(shí)驗(yàn)時(shí)通常使用的是第一種方式進(jìn)行編號(hào),第二種編號(hào)通常用于需要長(zhǎng)距離運(yùn)輸?shù)膭?dòng)物。
4、給藥:常用的給藥方式有:
①口服給藥:即灌胃。將注射器裝入藥物溶液,裝上灌胃針(灌胃針有直頭和彎頭兩種,區(qū)別不大)。如上所述,抓取小鼠后,使其頭部朝上,盡量呈一直線,取灌胃針,從小鼠嘴角一側(cè)緩緩插入(保持刻度在自己能看到的位置),順著小鼠口腔食道的弧度讓小鼠將針咽入,灌胃過(guò)程中如果遇到阻礙一定要及時(shí)拔出灌胃針,不可強(qiáng)行灌胃以免傷及小鼠食道以及肺部。灌胃針順利進(jìn)入后基本與小鼠身體呈一條直線,注入適量體積后再順著食道緩緩取出灌胃針。
②靜脈注射:小鼠尾部有3條靜脈和1條動(dòng)脈,3條靜脈非別位于背部,及兩側(cè)。靜脈注射時(shí)一般選取兩側(cè)靜脈,因?yàn)槠湎鄬?duì)于背部靜脈更為清晰飽滿。將小鼠固定后,用酒精擦拭其尾部靜脈,使其充血,以便注射。之后使注射器針孔處朝上,針與尾部呈約30°扎入尾部后向上輕挑,再向內(nèi)扎入部分,此過(guò)程應(yīng)該比較順暢,沒(méi)有阻礙,若阻礙較大則有可能扎入到了皮膚中。扎入后將活塞向后回抽一點(diǎn)可見(jiàn)到有血回流,則說(shuō)明成功扎入靜脈當(dāng)中,注射適當(dāng)體積后迅速拔針,用酒精進(jìn)行消毒。
5、取血:有斷尾取血法和眼眶取血法兩種。本次實(shí)驗(yàn)使用的是眼眶取血法。抓取小鼠,固定其頭部用手指將其上下眼瞼分開(kāi),露出其眼球并且不能閉上。用玻璃毛細(xì)管從其上眼角處扎入眼球后方毛細(xì)血管從,使血液順著毛細(xì)管留下,取血完成后快速將毛細(xì)管取下。
6、麻醉:抓取老鼠,使其頭部朝下,使其腹部臟器向胸腔靠攏,露出腹部空腔,以免刺傷臟器。將注射器豎直扎入靠近后腿部腹腔,刺入之后稍微向前傾斜但不要向前刺入,一般注入0.5mL麻醉劑即可。隨后拔出針,方向小鼠,等待幾分鐘后即可麻醉。
7、絕育:絕育手術(shù)是通過(guò)剪除雌鼠卵巢或雄鼠輸精管來(lái)實(shí)現(xiàn)的。將麻醉的雌鼠背面朝上,從其胸腔和尾部之間向下三分之一處剪開(kāi)一個(gè)小口,用鑷子將其卵巢取出,上面呈現(xiàn)紅色斑點(diǎn)的部分即為卵巢,用剪刀將這一部分剪除,然后用縫合針線將其縫合,縫合方法為將針穿過(guò)后,將線纏繞鑷子兩圈再逆時(shí)針纏繞兩圈,再重復(fù)纏繞一遍,將鑷子夾住線頭把纏繞的線移至線頭系緊即可(縫合過(guò)程全程用鑷子和剪刀操作),里面肌肉層以及外面皮層均需縫合。雄鼠則從外生殖器向上1-2cm處剪開(kāi)小口,用鑷子在其中找出輸精管(較細(xì)長(zhǎng)的乳白色小管),盡量多減掉一些,以免其長(zhǎng)長(zhǎng)愈合,以上述方法縫合傷口即可。
9、解剖:以頸椎脫臼法處死小鼠,使其腹面朝上。用鑷子將其腹部皮膚夾起,然后用剪刀剪開(kāi),觀察各個(gè)器官所在位置和形態(tài),解剖完的小鼠放入尸體袋中。
第三篇:趣味實(shí)驗(yàn)實(shí)驗(yàn)報(bào)告
趣味實(shí)驗(yàn)
實(shí)驗(yàn)員:張燕年級(jí)、班級(jí):09級(jí)化學(xué)三班學(xué)號(hào):40907147 聯(lián)系方式:***
一、實(shí)驗(yàn)?zāi)康模?/p>
激發(fā)學(xué)生學(xué)習(xí)化學(xué)的興趣,通過(guò)化學(xué)實(shí)驗(yàn)的趣味化活動(dòng),使學(xué)生的思維更加活躍,手腦并用的能力更強(qiáng),創(chuàng)新意識(shí)和創(chuàng)造精神得到充分發(fā)揮。
二、實(shí)驗(yàn)內(nèi)容:
(一)藍(lán)色振蕩實(shí)驗(yàn):
1.實(shí)驗(yàn)原理:
亞甲基藍(lán)的水溶液呈藍(lán)色,在堿性條件下,葡萄糖可以將它還原為無(wú)色,攪拌條件下空氣會(huì)把無(wú)色產(chǎn)物亞甲基白氧化為藍(lán)色,藍(lán)色又被還原為無(wú)色,如此反應(yīng),實(shí)驗(yàn)?zāi)芏啻沃貜?fù)。
2.實(shí)驗(yàn)儀器和藥品:
碘量瓶(用于微量元素的測(cè)定)、小燒杯、NaOH固體、葡萄糖、亞甲基藍(lán)溶液(10mol/L)。
3.實(shí)驗(yàn)步驟:
(1)稱取5.0g氫氧化鈉(為整個(gè)實(shí)驗(yàn)過(guò)程提供一個(gè)堿性環(huán)境)于小燒杯中,加入約30mL水充分溶解。再將所得溶液轉(zhuǎn)移至碘量瓶中,加水至約150mL;
(2)稱取7g葡萄糖加入到(1)所得的溶液中,充分?jǐn)嚢瑁蛊渫耆芙狻T傧虻饬科恐械渭?mL(約20滴)亞甲基藍(lán)溶液,緩慢搖勻,之后靜置大約半分鐘,會(huì)發(fā)現(xiàn)藍(lán)色的溶液慢慢變?yōu)闊o(wú)色透明的溶液,再繼續(xù)振蕩碘量瓶,會(huì)發(fā)現(xiàn)溶液又變回藍(lán)色,再繼續(xù)靜置半分鐘左右,溶液又變?yōu)闊o(wú)色。此現(xiàn)象可重復(fù)若干次。
(二)化學(xué)冰袋:
1.實(shí)驗(yàn)原理:
銨鹽溶解會(huì)吸熱,可以起到降溫的效果。
2.實(shí)驗(yàn)儀器和藥品:
密封袋、(NH4)2SO4、NH4NO3、Na2SO4?10H2O和NaHSO4。
3.實(shí)驗(yàn)步驟:
(1)分別稱取4g硫酸銨、5g硝酸銨、9.6g十水硫酸鈉和4g硫酸氫鈉;
(2)將所稱取的藥品按順序加入到密封袋中,添加順序如下:十水硫酸鈉、硫酸氫鈉、硫酸銨和硝酸銨。將所加的藥品用手壓碎,會(huì)發(fā)現(xiàn)密封袋溫度很低,此時(shí)我們的冰袋就做好了。
(三)固態(tài)汽水:
1.實(shí)驗(yàn)原理: ?3
碳酸氫鈉和檸檬酸鈉反應(yīng)可以釋放出二氧化碳,能帶走部分熱量,這就是特別爽口的碳酸飲料。
2.實(shí)驗(yàn)儀器和藥品:
燒杯、玻璃棒、研缽,檸檬酸、檸檬黃、蔗糖、明膠、碳酸氫鈉。
3.實(shí)驗(yàn)步驟:
(1)稱取0.1g明膠于小燒杯中,加入約10mL水使其吸水膨脹,如溶解過(guò)慢可用酒精燈適當(dāng)微熱;
(2)稱取2.5g碳酸氫鈉與小燒杯中,再取1mL(1)所得的溶液加入其中,最后用電吹風(fēng)將小燒杯中的液體吹干;
(3)取4g蔗糖、4.5g檸檬酸和微量的檸檬黃于研缽中,研細(xì)成粉末狀之后再加入到(2)所得的固體藥品中,這時(shí)我們就制成了固體汽水;
(4)用100mL來(lái)沖調(diào)固體汽水,就制成了我們?nèi)粘o嬘玫乃诘娘嬃稀?/p>
三、實(shí)驗(yàn)注意事項(xiàng)
1、明膠微熱溶解時(shí)不可溫度太高,燒杯距離火焰需保持一定的距離,原因是明膠是一種蛋白質(zhì),高溫容易變性。
2、稱量NaOH時(shí)需用燒杯,紙張要現(xiàn)稱現(xiàn)用,這樣也會(huì)產(chǎn)生潮解。當(dāng)然由于此實(shí)驗(yàn)主要是要一個(gè)堿性環(huán)境,所以此影響在此實(shí)驗(yàn)中可以忽略。
3、藍(lán)色振蕩實(shí)驗(yàn)過(guò)程中包含的是一種熱力學(xué)平衡,在2—3h后這個(gè)實(shí)驗(yàn)現(xiàn)象就完全消失,此時(shí)已達(dá)到了極限狀態(tài)。
4、冰袋制作不能使用無(wú)水碳酸鈉(純減)粉末,必須是含結(jié)晶水的晶體碳酸鈉或成塊狀純堿。可以將無(wú)水碳酸鈉粉末溶于水,然后加熱濃縮至晶體析出,自制晶體碳酸鈉。
四、實(shí)驗(yàn)反思1、1.化學(xué)是一門實(shí)驗(yàn)科學(xué),化學(xué)實(shí)驗(yàn)?zāi)軌蛞饘W(xué)生的認(rèn)知興趣,如果把實(shí)驗(yàn)做趣味化處理,則更能引起學(xué)生的興趣,產(chǎn)生強(qiáng)烈的學(xué)習(xí)動(dòng)機(jī)。我們本次實(shí)驗(yàn)包括觀察性趣味實(shí)驗(yàn)和操作性趣味實(shí)驗(yàn)。
2、作為一名準(zhǔn)化學(xué)教師,做好演示實(shí)驗(yàn)是很重要的一項(xiàng)教學(xué)技術(shù),尤其是趣味實(shí)驗(yàn),它在激發(fā)學(xué)生學(xué)習(xí)化學(xué)方面起著很重要的作用。而在這次演示實(shí)驗(yàn)時(shí),我由于過(guò)于緊張,所以出現(xiàn)了小差錯(cuò),而且講解實(shí)驗(yàn)的方式也不夠生動(dòng),沒(méi)有“趣味”,沒(méi)有很好的達(dá)到趣味實(shí)驗(yàn)所要求達(dá)到的目的。
第四篇:實(shí)驗(yàn)一 實(shí)驗(yàn)報(bào)告
網(wǎng) 絡(luò) 程 序 設(shè) 實(shí)驗(yàn)報(bào)告
實(shí)驗(yàn)名稱:Winsock編程接口實(shí)驗(yàn) 實(shí)驗(yàn)類型: 驗(yàn) 證 型
計(jì)
一、實(shí)驗(yàn)?zāi)康?/p>
? 掌握Winsock的啟動(dòng)和初始化;
? 掌握gethostname(),gethostbyname(),GetAdaptersInfo()等信息查詢函數(shù)的使用。
二、實(shí)驗(yàn)設(shè)計(jì)
實(shí)驗(yàn)內(nèi)容:
1、編寫程序能同時(shí)實(shí)現(xiàn)對(duì)多個(gè)域名的解析。比如在控制臺(tái)輸入:getip www.tmdps.cn對(duì)應(yīng)的IP地址列表。
2、編寫程序獲取并輸出本地主機(jī)的所有適配器的IP地址,子網(wǎng)掩碼,默認(rèn)網(wǎng)關(guān),MAC地址。
根據(jù)實(shí)驗(yàn)內(nèi)容編寫程序:
1、對(duì)相關(guān)域名進(jìn)行解析,利用gethostbyname()完成解析,用到的結(jié)構(gòu)體為:
struct hostent{ char FAR*
h_name;char FAR* FAR* h_aliases;short
h_addrtype;short
h_length;char FAR* FAR* h_addr_list;}
得到的IP地址列表由h_addr_list存儲(chǔ);
2、利用GetAdaptersInfo()函數(shù)獲得本地主機(jī)的相關(guān)信息,通過(guò)IP_ADAPTER_INFO結(jié)構(gòu)體返回所需信息。
IP_ADAPTER_INFO的定義如下: typedef struct _IP_ADAPTER_INFO {
struct _IP_ADAPTER_INFO* Next;
DWORD ComboIndex;
char AdapterName[MAX_ADAPTER_NAME_LENGTH + 4];
char Description[MAX_ADAPTER_DESCRIPTION_LENGTH + 4];
UINT AddressLength;
BYTE Address[MAX_ADAPTER_ADDRESS_LENGTH];
DWORD Index;
UINT Type;
UINT DhcpEnabled;
PIP_ADDR_STRING CurrentIpAddress;
IP_ADDR_STRING IpAddressList;
IP_ADDR_STRING GatewayList;
IP_ADDR_STRING DhcpServer;
BOOL HaveWins;
IP_ADDR_STRING PrimaryWinsServer;
IP_ADDR_STRING SecondaryWinsServer;
time_t LeaseObtained;
time_t LeaseExpires;
} IP_ADAPTER_INFO, *PIP_ADAPTER_INFO;
三、實(shí)驗(yàn)過(guò)程(包含實(shí)驗(yàn)結(jié)果)
1、分析題目,編寫程序;
2、將編寫的程序進(jìn)行編譯、運(yùn)行,輸入題目給定的內(nèi)容,完成題目要求; 結(jié)果如下:
第1題:
第2題:
四、討論與分析
思考題:
1、Winsock初始化的作用:只有調(diào)用了WSAStartup()進(jìn)行初始化之后,應(yīng)用程 序才能調(diào)用其他Windows Sockets API函數(shù),實(shí)現(xiàn)網(wǎng)絡(luò)通信;
2、函數(shù)原型為:
DWORD GetAdaptersInfo(PIP_ADAPTER_INFO pAdapterInfo,//接受數(shù)據(jù)的緩沖區(qū)
PULONG pOutBufLen
// 數(shù)據(jù)的長(zhǎng)度大小);
3、域名解析時(shí)出現(xiàn)域名對(duì)應(yīng)多個(gè)IP,原因:該域名存在于多個(gè)服務(wù)器。
五、實(shí)驗(yàn)者自評(píng)
通過(guò)本次實(shí)驗(yàn),我掌握了Winsock的啟動(dòng)和初始化以及gethostname(),gethostbyname(),GetAdaptersInfo()等函數(shù)查詢的使用,加深了以前對(duì)課本知識(shí)的認(rèn)識(shí)程度。
六、附錄:關(guān)鍵代碼(給出適當(dāng)注釋,可讀性高)
第1題代碼:
////////////////////////////////////////////////// // GetAllIps.cpp文件
//#include “../common/InitSock.h” #include
using namespace std;
#pragma comment(lib, “WS2_32”)// 鏈接到WS2_32.lib //CInitSock initSock;// 初始化Winsock庫(kù)
void main(){
char szMessage[256];// 取得本地主機(jī)名稱
// 初始化
WSADATA wsaData;if(WSAStartup(MAKEWORD(2,2), &wsaData)!= 0){
exit(0);}
// 通過(guò)主機(jī)名得到地址信息
printf(“ Get IP::”);gets(szMessage);
// 獲取主機(jī)信息
hostent *pHost = ::gethostbyname(szMessage);
// 打印出所有IP地址
in_addr addr;for(int i = 0;;i++){
char *p = pHost->h_addr_list[i];
if(p == NULL)
break;
memcpy(&addr.S_un.S_addr, p, pHost->h_length);
char *szIp = ::inet_ntoa(addr);
printf(“ 服務(wù)器 %s IP地址:%s n ”,szMessage, szIp);
printf(“服務(wù)器名字: %s n”,pHost->h_name);}
/////////////////////////// ::WSACleanup();
}
第2題代碼:
// 獲取并輸出本地主機(jī)的所有適配器的IP地址,子網(wǎng)掩碼,默認(rèn)網(wǎng)關(guān),MAC地址
#include
void main(){ // 定義變量
IP_ADAPTER_INFO *pAdapterInfo;ULONG ulOutBufLen;DWORD dwRetVal;PIP_ADAPTER_INFO pAdapter;
pAdapterInfo =(IP_ADAPTER_INFO *)malloc(sizeof(IP_ADAPTER_INFO));ulOutBufLen = sizeof(IP_ADAPTER_INFO);// 第一次獲取適配器信息,得到ulOutBufLen的實(shí)際大小
if(GetAdaptersInfo(pAdapterInfo, &ulOutBufLen)!= ERROR_SUCCESS){
free(pAdapterInfo);
pAdapterInfo =(IP_ADAPTER_INFO *)malloc(ulOutBufLen);} // 第二次獲取適配器信息,獲得了pAdapterInfo信息
if(dwRetVal = GetAdaptersInfo(pAdapterInfo, &ulOutBufLen)!= ERROR_SUCCESS){
cout<<“GetAdapterInfo Error!”< // 打印MAC地址信息、子網(wǎng)掩碼以及網(wǎng)關(guān) pAdapter = pAdapterInfo;while(pAdapter){ cout<<“MAC Address: ”; for(int i=0;i AddressLength;i++) { if(i ==(pAdapter->AddressLength-1)) { cout< } else { cout< } } cout< cout<<“IP 地址:”< IpAddressList.IpAddress.String< cout<<“子網(wǎng)掩碼 :”< IpAddressList.IpMask.String< cout<<“網(wǎng)關(guān) :”< IpAddressList.IpAddress.String< cout<<“****************************************”< pAdapter = pAdapter->Next;} // 釋放資源 if(pAdapterInfo){ free(pAdapterInfo);} cout< } 交換機(jī)實(shí)驗(yàn)II 實(shí)驗(yàn)?zāi)康?/p> 1.理解掌握環(huán)路對(duì)網(wǎng)絡(luò)造成的影響,掌握環(huán)路的自檢測(cè)的配置; 2.理解路由的原理,掌握三層交換設(shè)備路由的配置方法 3.掌握DHCP的原理以及其配置方法 實(shí)驗(yàn)步驟 配置交換機(jī)的IP地址,及基本的線路連接等; 實(shí)驗(yàn)1: ①.用獨(dú)立網(wǎng)線連接同一臺(tái)交換機(jī)的任意兩個(gè)端口時(shí)期形成自環(huán) ②.對(duì)交換機(jī)的兩個(gè)端口進(jìn)行配置,開(kāi)啟所有端口的環(huán)路檢測(cè)功能、設(shè)置檢測(cè)周期等屬性 實(shí)驗(yàn)2: ①.按圖1方式對(duì)三層交換機(jī)的VLAN、端口進(jìn)行配置 ②.在交換機(jī)中分別對(duì)VLAN的IP地址進(jìn)行配置 ③.啟動(dòng)三層交換機(jī)的IP路由 ④.設(shè)置PC-A、PC-B的IP地址,分別將它們的網(wǎng)關(guān)設(shè)置為所屬三層交換機(jī)VLAN的IP地址 ⑤.通過(guò)Ping驗(yàn)證主機(jī)A、B之間的互通狀況 實(shí)驗(yàn)3: 三層交換機(jī)作為DHCP服務(wù)器,兩臺(tái)PC-A和PC-B,分別從交換機(jī)上獲取IP地址。PC-C手動(dòng)配置IP地址。 ①.按圖2方式建立主機(jī)A、B、C與三層交換機(jī)間的連接,配置交換機(jī)的IP地址 ②.配置三層交換機(jī)的DHCP地址池屬性 ③.啟動(dòng)DHCP服務(wù) ④.(1)查看主機(jī)A、B能否正確的獲取到給定范圍內(nèi)IP地址,通過(guò)Ping查看網(wǎng)關(guān)、交換機(jī)之間的互通情況;(2)拔掉主機(jī)B的網(wǎng)線,將主機(jī)C的IP地址設(shè)置為主機(jī)B所獲取的到的IP地址,然后再插上B機(jī)網(wǎng)線,查看其是否能獲取到不同的IP地址;(3)分別重啟主機(jī)A、B及交換機(jī),查看A、B獲取到的IP地址是否和前一次相同。 圖1.三層路由連接圖 圖2.DHCP連接圖 實(shí)驗(yàn)結(jié)果 實(shí)驗(yàn)1:環(huán)路測(cè)試 交換機(jī)出現(xiàn)環(huán)路的自檢測(cè)結(jié)果: 實(shí)驗(yàn)2:路由配置: 主機(jī)A連接交換機(jī)端口2,劃分為vlan10,端口IP地址為192.168.1.1。主機(jī)IP地址192.168.1.23; 主機(jī)B連接交換機(jī)端口10,劃分為vlan20,端口IP地址為192.168.2.1。主機(jī)IP地址192.168.2.27; 在未設(shè)置IP routing之前主機(jī)A、B分屬于不同網(wǎng)段,因此它們不能互通,設(shè)置后通過(guò)路由則可相互聯(lián)通: 實(shí)驗(yàn)三:DHCP配置和驗(yàn)證: 主機(jī)A、B、C分別連接到交換機(jī)的端口2,端口18和端口10上。其中主機(jī)A、B的IP地址自動(dòng)獲取,主機(jī)C的IP地址則手動(dòng)配置。 主機(jī)A通過(guò)DHCP獲取的IP地址(192.168.1.211) 主機(jī)B通過(guò)DHCO獲取到的IP地址(192.168.1.210) 測(cè)試主機(jī)A與主機(jī)C的互通性(可連通) 測(cè)試主機(jī)B與主機(jī)A、C之間的互通性(可連通) 當(dāng)主機(jī)C配置為主機(jī)B獲取到的IP地址是會(huì)產(chǎn)生IP地址沖突的錯(cuò)誤提示: 配置的主機(jī)C的IP地址與主機(jī)B的IP地址相沖突 主機(jī)B網(wǎng)線重新連接后獲取到的新的IP地址 交換機(jī)重新啟動(dòng)后A、B主機(jī)自動(dòng)獲取到的IP地址信息: 主機(jī)A自動(dòng)獲取的IP地址 主機(jī)B自動(dòng)獲取的IP地址 DHCP可分配IP地址池內(nèi)IP數(shù)目小于申請(qǐng)的主機(jī)數(shù)目時(shí)實(shí)驗(yàn)驗(yàn)證情況:(可分配的IP地址為192.168.1.210 — 192.168.1.212),此時(shí)連接主機(jī)A、B、C、D。 主機(jī)D自動(dòng)獲取IP地址的結(jié)果 實(shí)驗(yàn)與結(jié)果分析 環(huán)路問(wèn)題: 分為第二層環(huán)路和第三層環(huán)路,所有環(huán)路的形成都是由于目的路徑不明確導(dǎo)致混亂而造成的。例如第二層,一個(gè)廣播信息經(jīng)過(guò)兩個(gè)交換機(jī)的時(shí)候會(huì)不斷惡性循環(huán)的產(chǎn)生廣播造成環(huán)路,而第三層環(huán)路則是原路由意外不能工作,造成路由通告錯(cuò)誤,形成一個(gè)惡性循環(huán)。傳統(tǒng)的二層預(yù)防技術(shù)主要有STP(Spanning tree)來(lái)預(yù)防,STP在不斷的修改和更新中,產(chǎn)生了諸如STP/RSTP/MSTP等多個(gè)版本,大家可根據(jù)各自的組網(wǎng)規(guī)劃來(lái)選擇應(yīng)用,但是STP的配置復(fù)雜度,以及協(xié)議本身的開(kāi)銷通常都是網(wǎng)絡(luò)管理人員比較頭痛的事情。 解決因環(huán)路(自環(huán)或外環(huán))對(duì)網(wǎng)絡(luò)造成的影響,能夠提高網(wǎng)絡(luò)的自檢錯(cuò)性、容錯(cuò)性和健壯性。環(huán)路檢測(cè)的過(guò)稱為:對(duì)交換機(jī)的每個(gè)端口周期性的發(fā)送回路檢測(cè)(Loopback-detection)數(shù)據(jù)包;交換機(jī)查看端口收到包的CPUMAC字段,如果其中存的是本交換機(jī)的MAC,則本交換機(jī)的某些端口形成環(huán)路,否則將其丟棄,出現(xiàn)環(huán)路后,交換機(jī)會(huì)關(guān)閉端口號(hào)較大的端口以消除環(huán)路。圖1中反映了在交換機(jī)開(kāi)啟所有端口的環(huán)路檢測(cè)功能后每隔30秒檢測(cè)到的信息以及對(duì)端口的關(guān)閉等操作信息。 三層路由意義和工作過(guò)程: 實(shí)現(xiàn)不同VLAN間主機(jī)的通信,通過(guò)配置VLAN能夠有效地控制廣播域的大小。在同一VLAN內(nèi)的主機(jī)間的通信不需要經(jīng)過(guò)交換機(jī)的路由處理可直接到達(dá)目的主機(jī),當(dāng)不同VLAN間通訊時(shí),數(shù)據(jù)包先轉(zhuǎn)發(fā)至路由器,由路由器查詢其路由轉(zhuǎn)發(fā)表選擇正確的端口間數(shù)據(jù)包轉(zhuǎn)發(fā)到目的VLAN的交換機(jī),再由目的VLAN內(nèi)交換機(jī)將數(shù)據(jù)包轉(zhuǎn)發(fā)至目的主機(jī)。其中扮演主要角色的即為交換機(jī)的路由功能,如果沒(méi)有設(shè)置相關(guān)屬性則不同VLAN間不能通訊。 因此在圖3的驗(yàn)證實(shí)驗(yàn)中,通過(guò)路由器的轉(zhuǎn)發(fā)功能實(shí)現(xiàn)了分別位于VLAN10和VLAN20中主機(jī)A、B之間的通信,在未配置IP Routing之前VLAN10和VLAN20分屬不同網(wǎng)段(A、B也屬于不同網(wǎng)段),因此不能實(shí)現(xiàn)通信,配置之后路由器(三層交換設(shè)備)可通過(guò)內(nèi)部路由轉(zhuǎn)發(fā)表實(shí)現(xiàn)數(shù)據(jù)的轉(zhuǎn)發(fā)和通信。 DHCP工作過(guò)程與實(shí)驗(yàn)分析: 即動(dòng)態(tài)主機(jī)配置協(xié)議(Dynamic Host Configuration Protocol),是一個(gè)局域網(wǎng)的網(wǎng)絡(luò)協(xié)議,使用UDP協(xié)議工作,主要有兩個(gè)用途:給內(nèi)部網(wǎng)絡(luò)或網(wǎng)絡(luò)服務(wù)供應(yīng)商自動(dòng)分配IP地址,是使內(nèi)部網(wǎng)絡(luò)管理員能夠集中管理(從中心結(jié)點(diǎn)監(jiān)控)和自動(dòng)分配IP 網(wǎng)絡(luò)地址的通信協(xié)議。當(dāng)某臺(tái)計(jì)算機(jī)移到網(wǎng)絡(luò)中的其它位置時(shí),能自動(dòng)收到新的IP 地址。DHCP 服務(wù)器從地址池中為客戶端選擇并分配IP 地址及其他相關(guān)參數(shù)當(dāng)作為DHCP服務(wù)器的設(shè)備收到客戶端發(fā)來(lái)的DHCP 請(qǐng)求時(shí),將從地址池中挑選一個(gè)空閑的IP 地址。 DHCP工作過(guò)程: 當(dāng) DHCP客戶端第一次登錄網(wǎng)絡(luò)的時(shí)候,也就是客戶發(fā)現(xiàn)本機(jī)上沒(méi)有任何 IP 數(shù)據(jù)設(shè)定,它會(huì)向網(wǎng)絡(luò)發(fā)出一個(gè) DHCP DISCOVER封包(廣播包)。因?yàn)榭蛻舳诉€不知道自己屬于哪一個(gè)網(wǎng)絡(luò),所以封包的來(lái)源地址會(huì)為 0.0.0.0,而目的地址則為 255.255.255.255,然后再附上 DHCP discover 的信息,向網(wǎng)絡(luò)進(jìn)行廣播。如果都沒(méi)有得到DHCP服務(wù)器的響應(yīng),客戶端則會(huì)顯示錯(cuò)誤信息,宣告 DHCP discover 的失敗。之后,基于使用者的選擇,系統(tǒng)會(huì)繼續(xù)在 5 分鐘之后再重復(fù)一次 DHCP discover 的過(guò)程。 當(dāng) DHCP服務(wù)器監(jiān)聽(tīng)到客戶端發(fā)出的 DHCP discover 廣播后,它會(huì)從那些還沒(méi)有租出的地址范圍內(nèi),選擇最前面的空置 IP,連同其它 TCP/IP 設(shè)定,響應(yīng)給客戶端一個(gè) DHCP OFFER封包。由于客戶端在開(kāi)始的時(shí)候還沒(méi)有 IP 地址,所以在其 DHCP discover封包內(nèi)會(huì)帶有其 MAC 地址信息,并且有一個(gè) XID 編號(hào)來(lái)辨別該封包,DHCP服務(wù)器響應(yīng)的 DHCP offer 封包則會(huì)根據(jù)這些資料傳遞給要求租約的客戶。根據(jù)服務(wù)器端的設(shè)定,DHCP offer封包會(huì)包含一個(gè)租約期限的信息。 如果客戶端收到網(wǎng)絡(luò)上多臺(tái) DHCP 服務(wù)器的響應(yīng),只會(huì)挑選其中一個(gè) DHCP offer 而已(通常是最先抵達(dá)的那個(gè)),并且會(huì)向網(wǎng)絡(luò)發(fā)送一個(gè)DHCP request廣播封包,告訴所有 DHCP 服務(wù)器它將指定接受哪一臺(tái)服務(wù)器提供的 IP 地址。同時(shí),客戶端還會(huì)向網(wǎng)絡(luò)發(fā)送一個(gè) ARP封包,查詢網(wǎng)絡(luò)上面有沒(méi)有其它機(jī)器使用該 IP 地址;如果發(fā)現(xiàn)該 IP 已經(jīng)被占用,客戶端則會(huì)送出一個(gè) DHCPDECLINE 封包給 DHCP服務(wù)器,拒絕接受其 DHCP offer,并重新發(fā)送 DHCP discover 信息。事實(shí)上,并不是所有 DHCP客戶端都會(huì)無(wú)條件接受 DHCP服務(wù)器的 offer,尤其這些主機(jī)安裝有其它 TCP/IP 相關(guān)的客戶軟件。客戶端也可以用 DHCP request 向服務(wù)器提出 DHCP 選擇,而這些選擇會(huì)以不同的號(hào)碼填寫在 DHCP Option Field 里面。 當(dāng) DHCP服務(wù)器接收到客戶端的 DHCP request 之后,會(huì)向客戶端發(fā)出一個(gè)DHCPACK 響應(yīng),以確認(rèn) IP 租約的正式生效,標(biāo)志著一次DHCP的工作過(guò)程完成。 圖4—6反映了主機(jī)A、B通過(guò)自動(dòng)獲取IP地址方式由三層交換機(jī)動(dòng)態(tài)分配IP后,各自得到的IP地址,由于A、B、C連接與同一臺(tái)交換設(shè)備上,由沒(méi)有VLAN劃分等因素,所以它們之間不論是自動(dòng)獲取IP地址還是手動(dòng)配置IP地址(不沖突的前提下)都能相互連通。當(dāng)為主機(jī)C配置成已得到自動(dòng)分配IP地址的主機(jī)B的IP地址時(shí),自然會(huì)出現(xiàn)IP地址沖突的出錯(cuò)信息提示。當(dāng)B網(wǎng)線重新鏈接時(shí),相當(dāng)于重新加入的客戶端,交換機(jī)會(huì)從地址池中順序選擇下一個(gè)未分配的IP地址給新的請(qǐng)求用戶。因此主機(jī)B會(huì)獲得新新的IP地址,并且其值是主機(jī)C的IP地址的下一個(gè)鄰接IP地址(在未超出可分配的IP地址范圍條件下)。圖7 —10中反映了上述描述的結(jié)果。 圖11中顯示了一種造成IP地址動(dòng)態(tài)分配失敗的情形:可分配的IP地址數(shù)僅有3個(gè),而由4臺(tái)主機(jī)請(qǐng)求分配IP地址,當(dāng)可分配地址全部分配給主機(jī)A、B、C后,主機(jī)D的請(qǐng)求不能得到滿足,因此未得到給定范圍內(nèi)的合理IP地址。第五篇:交換機(jī)實(shí)驗(yàn) 實(shí)驗(yàn)報(bào)告