GCC 編譯心得

include math.h時 需要在編譯的時候加上 -lm參數(for linker)
ex: gcc ex.c -lm -o ex

include stdio.h 需要加上-lc 參數
一般不加的原因, 是因為-lc是default參數

新竹油漆師傅

網站

http://tw.myblog.yahoo.com/jw!qlAQBVmfQ0AhHp7jSpelBA–/profile

量少可以按日點工.(材料自備)
合作方式可以洽談.
師傅老實, 配合度高. 價錢很便宜.

[轉貼]perl dec2hex

#!/usr/bin/perl

$foo = 123;
$hexval = sprintf(“%x", $foo);
$decval = hex($hexval);

print “\n$foo in hex is $hexval and in dec is $decval\n";

嵌入式 C語言查表

先宣告 ‘表’架構.

strcut lut{
unsigned char m00;
unsigned char m01;
}

之後將表矩陣做出來.

struct lut a[]={ {1,2},{3,4}};

之後可以利用矩陣index和struct內宣告來取.
例如 a[0].m00, a[1].m01

若是有多個表切換
struct lut *local_tb;
switch(tb_sel){
case(0): local_tb = tb1;
break;
case(1): local_tb = tb2;
break;
default: local_tb = tb1;
break;
};

[轉貼]matlab 檔案處理.

http://tw.myblog.yahoo.com/jw!laMc_3KQEk.bNqgMewVZeSI-/article?mid=34
http://www.ymlib.net/article/sort010/info-341.html

檔案的存取及處理

本分享主要是給新使用者容易上手
因此寫的有點簡單
希望大家見諒

fopen開啟檔案
[fid,message]=fopen(‘檔案名稱’,’參數’)
fid  為檔案識別碼,當使用fopen 開啟檔案成功時,就會送回正整數的fid碼,如3,反之若開啟失敗時則fid會送回 –1的值給,message為開啟檔案若錯誤時則傳回錯誤訊息
參數(Permission):
‘r’   只能讀,若檔案不存在時會發生錯誤
‘r+’ 能讀能寫,若檔案不存在時會發生錯誤
‘w’  只能寫,若檔案不存在時會建立一新的檔案,若檔案存在則會將內容覆蓋過 去
‘w+’ 能 讀能寫,若檔案不存在時會建立一新的檔案,若檔案存在則會將內容覆蓋過去
‘a’  只能附加(append)使用讀的方式,若檔案不存在時會建立一新的檔案,若檔案存在則會將內 容加於檔案後方
‘a+’  只能附加(append)使用讀或寫的方式,若檔案不存在時會建立一新的檔案,若檔案存在則會 將內容加於檔案後方

fclose關閉檔案
status=fclose(fid)
fclose(‘all’)
當執行fclose 成功就會送回一個0值給status。

檔案存取fscanf,fprintf,fread,fwrite
若檔案內容可以分為二進位或ASCII
若為ASCII碼時,檔案存取的方法為:
(1) fscanf,fprintf
fscanf讀取檔案
Variable=fscanf(fid,’資料格式’,讀取資料的大小)
格式
%g  表示為浮點數值
%d  表示為十進位數值
%s  表示為字串

A = fscanf(fid,’%5d’)   %讀檔案格式為十進位整數
A = fscanf(fid,’%5d’,100)   %只讀100筆

fscanf寫入檔案
fprintf(fid,’資料格式’,資料矩陣或變數);

x = 0:.1:1; y = [x; exp(x)];
fid = fopen(‘exp.txt’,’w’);
fprintf(fid,’%6.2f  %12.8f\n’,y);
fclose(fid);

(2) Variable=load(‘檔案名稱’)

當然必須先使用save將檔案儲存
如倒案為bb變數為aa

save bb.txt aa -ascii

(存為.txt主要是為了可以看到資料內容)
再由load bb即可

若檔案內容是二進位檔時,檔案存取的方法為:
fread讀取檔案
fread(FID,讀取的資料大小,’資料精度’)
資料精度
char     函符號的字元 (8位元)
uchar    不含正負符號的字元 (8位元)
short     短整數 (16位元,範圍在-215~215-1)
int       整數 (32位元)
long     長整數 (32位元,範圍在-231~231-1)
ushort   不含正負符號的短整數
uint     不含正負符號的短整數
ulong    不含正負符號的短整數
float     單精準浮點小數 (32位元)
double   雙精準浮點小數 (64位元)

a=fread(fid)﹔  此時a為一串二進位碼
b=char(a’)﹔  將二進位碼變成橫向的字串
c=str2num(b); 字串變數字

fwrite寫入檔案
fwrite (fid,寫入資料,’資料精度’)

fid = fopen(‘magic5.bin’,’wb’)
fwrite(fid,magic(5),’integer*4′)

EXAMPLE:
fid=fopen(‘exp.txt’,’wt’);
fprintf(fid,’%d %2.1f %4.2f’,10,20,3.2,14.58);
fclose(fid);

x=load(‘exp.txt’);

————————————————————————————————————–

matlab中fwrite函数的具体使用方法实例如下:

fwrite函数按照指定的数据精度将矩阵中的元素写入到文件中。其调用格式为:
COUNT=fwrite(fid,A,precision)
说明:其中COUNT返回所写的数据元素个数(可缺省),fid为文件句柄,A用来存放写入文件的数据,precision代表数据精度,常用的数据精度 有:char、uchar、int、long、float、double等。缺省数据精度为uchar,即无符号字符格式。
例6.8 将一个二进制矩阵存入磁盘文件中。
>> a=[1 2 3 4 5 6 7 8 9];
>> fid=fopen(‘d:\test.bin’,’wb’)

%以二进制数据写入方式打开文件
fid =
3           %其值大于0,表示打开成功
>> fwrite(fid,a,’double’)
ans =
9           %表示写入了9个数据
>> fclose(fid)
ans =
0           %表示关闭成功

[備忘] Linux下的verilog開發環境

Icarus Verilog + GTKWave

compiler: Icarus Verilog
yum可以直接安裝
yum install iverilog

編譯: iverilog -o outf  a.v tb_a.v
執行 outf 產生fsdb

編譯: iverilog -o outf -c filelist.f
利用-c flag 可以加入filelist檔.

tb內產生fsdb的語法

initial begin
$dumpfile(“./tb_ex.fsdb");
$dumpvars(0, tb_ex);
end

[轉貼] Ncverilog 的一些经验

http://blog.21ic.com/user1/1425/archives/2008/47280.html

1.Verilog和Ncverilog命令使用库文件或库目录
ex). ncverilog -f run.f -v lib/lib.v -y lib2 +libext+.v  //一般编译文件在run.f中, 库文件在lib.v中,lib2目录中的.v文件系统自动搜索
使用库文件或库目录,只编译需要的模块而不必全部编译

2.Verilog Testbench信号记录的系统任务:
1). SHM数据库可以记录在设计仿真过程中信号的变化. 它只在probes有效的时间内记录你set probe on的信号的变化.
ex). $shm_open(“waves.shm");  //打开波形数据库
$shm_probe(top, “AS"); // set probe on “top",
第二个参数:  A —  signals of the specific  scrope
S — Ports of the specified scope and below, excluding library cells
C — Ports of the specified scope and below, including library cells
AS — Signals of the specified scope and below, excluding library cells
AC — Signals of the specified scope and below, including library cells
还有一个 M ,表示当前scope的memories, 可以跟上面的结合使用, “AM" “AMS" “AMC"
什么都不加表示当前scope的ports;
$shm_close    //关闭数据库
2). VCD数据库也可以记录在设计仿真过程中信号的变化. 它只记录你选择的信号的变化.
ex). $dumpfile(“filename");    //打开数据库
$dumpvars(1, top.u1);   //scope = top.u1, depth = 1
第一个参数表示深度, 为0时记录所有深度; 第二个参数表示scope,省略时表当前的scope.
$dumpvars; //depth = all scope = all
$dumpvars(0); //depth = all scope = current
$dumpvars(1, top.u1); //depth = 1 scope = top.u1
$dumpoff      //暂停记录数据改变,信号变化不写入库文件中
$dumpon      //重新恢复记录
3). Debussy fsdb数据库也可以记录信号的变化,它的优势是可以跟debussy结合,方便调试.
如果要在ncverilog仿真时,记录信号, 首先要设置debussy:
a. setenv LD_LIBRARY_PATH :$LD_LIBRARY_PATH
(path for debpli.so file (/share/PLI/nc_xl//nc_loadpli1))
b. while invoking ncverilog use the +ncloadpli1 option.
ncverilog -f run.f +debug +ncloadpli1=debpli:deb_PLIPtr
fsdb数据库文件的记录方法,是使用$fsdbDumpfile和$fsdbDumpvars系统函数,使用方法参见VCD
注意: 在用ncverilog的时候,为了正确地记录波形,要使用参数: “+access+rw", 否则没有读写权限

3. ncverilog编译的顺序:  ncverilog file1 file2 ….
有时候这些文件存在依存关系,如在file2中要用到在file1中定义的变量,这时候就要注意其编译的顺序是从后到前,就先编译file2然后才是 file2.

4. 信号的强制赋值force
首先, force语句只能在过程语句中出现,即要在initial 或者 always 中间. 去除force 用 release 语句.
initial begin     force sig1 = 1’b1; … ; release sig1; end
force可以对wire赋值,这时整个net都被赋值; 也可以对reg赋值.

sendmail alias

使用sendmail的alias功能

設定檔路徑: /etc/aliases
ex: vr_name:  real_user1, real_user2

設定完需下指令"newaliases"

Perl脚本

http://www.vaciller.com/manage/article/articledetail.asp?ID=35
Perl脚本:

#!/usr/local/bin/perl -w

use strict;
use Getopt::Long;
#use vars qw ($para);
#use File::Copy;

#get options
my %options;
GetOptions(\%options, "help|h|?", "deb") || print_usage();
if(exists $options{help}){
  print_usage();
}

#tools paths
my $ncvlog = "/home/cf/eda/ius/tools/bin/ncvlog";
my $ncelab = "/home/cf/eda/ius/tools/bin/ncelab";
my $ncsim = "/home/cf/eda/ius/tools/bin/ncsim";
my $verdi = "/home/cf/eda/verdi2009/bin/verdi";
my $novas = "/home/cf/eda/verdi2009/share/PLI/nc61/LINUX/nc_loadpli1/debpli.so";

#source files
my $srcfile = "";
$srcfile = "/home/cf/workspace/nc/counter/count.v";
$srcfile .= " /home/cf/workspace/nc/counter/count_tb.v";

#run verdi to debug
if(exists $options{deb}){
  system("$verdi -2001 $srcfile -ssf counter.fsdb");
#  system("$verdi -2001 $srcfile");
  die;
}

#compile
system("$ncvlog -messages $srcfile");

#elab
system("$ncelab -messages -access +wrc -loadpli1 $novas:deb_PLIPtr  worklib.counter_tb:module");

#simulation
system("$ncsim -messages worklib.counter_tb:module");

#the following is sub functions
sub print_usage{
  print "Run scripts: $0\n";
  print "$0 [-help|h|?] [-deb]\n";
  die;
}

PHP做簡單日曆

http://pink0420.pixnet.net/blog/post/4795571
<?
$year = date(“Y");
$month = date(“m");
$day = date(“d");
//本月最後一天
$lastday = date(“d",mktime (0,0,0,$month+1,0,$year));
//本月第一天星期幾
$firstweek = date(“D",mktime (0,0,0,$month,1,$year));
//上個月最後一天
$last_month_day = date(“d",mktime (0,0,0,$month,0,$year));

$week[“Sun"] = 0;
$week[“Mon"] = 1;
$week[“Tue"] = 2;
$week[“Wed"] = 3;
$week[“Thu"] = 4;
$week[“Fri"] = 5;
$week[“Sat"] = 6;

$first_day = $week[$firstweek];
$next_month_day =1;
$run7 = 1;
echo “<table>
<tr>
<td colspan=7 align=center><b>{$year}-{$month}</b></td>
</tr>
<tr>
<td>Sun</td>
<td>Mon</td>
<td>Tue</td>
<td>Wed</td>
<td>Thu</td>
<td>Fri</td>
<td>Sat</td>
</tr>";

for( $i=0 ; $i<35 ; $i++ ){
if($run7%7 ==1 ){
echo “<tr>";
}
if( $i<$first_day ){
$color = “#666666″;
$days = $lastday-($first_day-$i-1);
}else if($i<=$lastday+1){
$color = “#0000CC";
$days = $i-$first_day+1;
}
else{
$color = “#666666″;
$days = $next_month_day;
$next_month_day++;
}
echo “<td align=center><font color={$color}>{$days}</font></td>\n";

if($run7%7 ==0 ){
echo “</tr>\n";
$run7 = 1;
}else{
$run7++;
}

}
echo “</table>";

?>

« Older entries