http://www.cnblogs.com/woshitianma/ 博客有许多跟我专业有关的,值得参考。
天马行空W 做想做的,做该做的——有思想就去实现!
来源:http://www.cnblogs.com/woshitianma/archive/2012/12/21/2828370.html
verilog常用系统函数以及例子
1.打开文件
integer file_id;
file_id = fopen("file_path/file_name");
2.写入文件:$fmonitor,$fwrite,$fdisplay,$fstrobe
//$fmonitor只要有变化就一直记录
$fmonitor(file_id, "%format_char", parameter);
$fmonitor(file_id, "%m: %t in1=%d o1=%h", $time, in1, o1);
//$fwrite需要触发条件才记录
$fwrite(file_id, "%format_char", parameter);
//$fdisplay需要触发条件才记录
$fdisplay(file_id, "%format_char", parameter);
$fstrobe();
3.读取文件:$fread
integer file_id;
file_id = $fread("file_path/file_name", "r");
4.关闭文件:$fclose
$fclose(fjile_id);
5.由文件设定存储器初值:$readmemh,$readmemb
$readmemh("file_name", memory_name"); //初始化数据为十六进制
$readmemb("file_name", memory_name"); //初始化数据为二进制
6、文件显示:$monitor,$write,$display
$display,$write用于输出信息
$display("rvel = %h hex %d decimal",rvel,rvel);
$monitor($time, ,"rxd = %b txd = %b",rxd ,txd)
6、文件定位
$fseek,文件定位,可以从任意点对文件进行操作;
$fscanf,对文件一行进行读写。
7、退出仿真器$finish
8、随机数据产生:$random
1 下面是一些常见的应用: 2 1、读写文件 3 `timescale 1 ns/1 ns 4 module FileIO_tb; 5 integer fp_r, fp_w, cnt; 6 reg [7:0] reg1, reg2, reg3; 7 initial begin 8 fp_r = $fopen("data_in.txt", "r"); 9 fp_w = $fopen("data_out.txt", "w"); 10 11 while(!$feof(fp_r)) begin 12 cnt = $fscanf(fp_r, "%d %d %d", reg1, reg2, reg3); 13 $display("%d %d %d", reg1, reg2, reg3); 14 $fwrite(fp_w, "%d %d %d ", reg3, reg2, reg1); 15 end 16 17 $fclose(fp_r); 18 $fclose(fp_w); 19 end 20 endmodule 21 2、 22 integer file, char; 23 reg eof; 24 initial begin 25 file = $fopenr("myfile.txt"); 26 eof = 0; 27 while (eof == 0) begin 28 char = $fgetc(file); 29 eof = $feof (file); 30 $display ("%s", char); 31 end 32 end 33 3、文件处理定位 34 `define SEEK_SET 0 35 `define SEEK_CUR 1 36 `define SEEK_END 2 37 integer file, offset, position, r; 38 r = $fseek(file, 0, `SEEK_SET); 39 r = $fseek(file, 0, `SEEK_CUR); 40 r = $fseek(file, 0, `SEEK_END); 41 r = $fseek(file, position, `SEEK_SET); 42 4、 43 integer r, file, start, count; 44 reg [15:0] mem[0:10], r16; 45 r = $fread(file, mem[0], start, count); 46 r = $fread(file, r16); 47 5、 48 integer file, position; 49 position = $ftell(file); 50 6、 51 integer file, r, a, b; 52 reg [80*8:1] string; 53 file = $fopenw("output.log"); 54 r = $sformat(string, "Formatted %d %x", a, b); 55 r = $sprintf(string, "Formatted %d %x", a, b); 56 r = $fprintf(file, "Formatted %d %x", a, b); 57 7、 58 integer file, r; 59 file = $fopenw("output.log"); 60 r = $fflush(file); 61 8、 62 // This is a pattern file - read_pattern.pat 63 // time bin dec hex 64 10: 001 1 1 65 20.0: 010 20 020 66 50.02: 111 5 FFF 67 62.345: 100 4 DEADBEEF 68 75.789: XXX 2 ZzZzZzZz 69 `timescale 1ns / 10 ps 70 `define EOF 32'hFFFF_FFFF 71 `define NULL 0 72 `define MAX_LINE_LENGTH 1000 73 74 module read_pattern; 75 integer file, c, r; 76 reg [3:0] bin; 77 reg [31:0] dec, hex; 78 real real_time; 79 reg [8*`MAX_LINE_LENGTH:0] line; 80 81 initial 82 begin : file_block 83 $timeformat(-9, 3, "ns", 6); 84 $display("time bin decimal hex"); 85 file = $fopenr("read_pattern.pat"); 86 if (file == `NULL) // If error opening file 87 disable file_block; // Just quit 88 89 c = $fgetc(file); 90 while (c != `EOF) 91 begin 92 93 if (c == "/") 94 r = $fgets(line, `MAX_LINE_LENGTH, file); 95 else 96 begin 97 // Push the character back to the file then read the next time 98 r = $ungetc(c, file); 99 r = $fscanf(file," %f: ", real_time); 100 101 // Wait until the absolute time in the file, then read stimulus 102 if ($realtime > real_time) 103 $display("Error - absolute time in file is out of order - %t", 104 real_time); 105 else 106 #(real_time - $realtime) 107 r = $fscanf(file," %b %d %h ",bin,dec,hex); 108 end // if c else 109 c = $fgetc(file); 110 end // while not EOF 111 112 r = $fcloser(file); 113 end // initial 114 115 // Display changes to the signals 116 always @(bin or dec or hex) 117 $display("%t %b %d %h", $realtime, bin, dec, hex); 118 119 endmodule // read_pattern 120 9、自动比较输出结果 121 `define EOF 32'hFFFF_FFFF 122 `define NULL 0 123 `define MAX_LINE_LENGTH 1000 124 module compare; 125 integer file, r; 126 reg a, b, expect, clock; 127 wire out; 128 reg [`MAX_LINE_LENGTH*8:1]; 129 parameter cycle = 20; 130 131 initial 132 begin : file_block 133 $display("Time Stim Expect Output"); 134 clock = 0; 135 136 file = $fopenr("compare.pat"); 137 if (file == `NULL) 138 disable file_block; 139 140 r = $fgets(line, MAX_LINE_LENGTH, file); // Skip comments 141 r = $fgets(line, MAX_LINE_LENGTH, file); 142 143 while (!$feof(file)) 144 begin 145 // Wait until rising clock, read stimulus 146 @(posedge clock) 147 r = $fscanf(file, " %b %b %b ", a, b, expect); 148 149 // Wait just before the end of cycle to do compare 150 #(cycle - 1) 151 $display("%d %b %b %b %b", $stime, a, b, expect, out); 152 $strobe_compare(expect, out); 153 end // while not EOF 154 155 r = $fcloser(file); 156 $stop; 157 end // initial 158 159 always #(cycle / 2) clock = !clock; // Clock generator 160 161 and #4 (out, a, b); // Circuit under test 162 endmodule // compare 163 10、从文件中读数据到mem(这个好像一般人用的最多了) 164 `define EOF 32'HFFFF_FFFF 165 `define MEM_SIZE 200_000 166 module load_mem; 167 integer file, i; 168 reg [7:0] mem[0:`MEM_SIZE]; 169 reg [80*8:1] file_name; 170 initial 171 begin 172 file_name = "data.bin"; 173 file = $fopenr(file_name); 174 i = $fread(file, mem[0]); 175 $display("Loaded %0d entries ", i); 176 i = $fcloser(file); 177 $stop; 178 end endmodule // load_mem
MVI (Multimedia, Video, and Imaging) IP
来源:http://forums.xilinx.com/t5/Digital-Signal-Processing-IP-and/bd-p/DSP
来源:http://www.xilinx.com/esp/video/refdes_listing.htm 可以下载参考实例
Deinterlacer, Video Scaler and Timing Controller | Real-Time Video Engine Targeted Reference Design | Reference Designs | Xilinx, Inc. |
这个论坛很给力。
video scaler IP -- vivado
来源:http://forums.xilinx.com/xlnx/board/crawl_message?board.id=DSP&message.id=3737
Hi Everyone,
Now I have problems about Video Scaler 7.01a in ISE 14.4 on spartan6 device. In most situations the scaler is working in the down-scale mode, and the output width and height are always less than the input width and height, and the scaler result is also correct. While in some situations such as convert 1024x768 to 1280x720, the horizontal direction is up scale while vertical direction is down scale, the scaler will work incorrectly and output image is uploaded in the attachment.
While I also checked the scaler bit accurate C model, and the c model can handle YUV color format 1024x768 to 1280x720, and I need further work to check whether the c model can handle RGB color format 1024x768 to 1280x720. Mean while I'd like to know whether the problem is only related to scaler, not related to the C model
答案
来源:http://wenku.baidu.com/view/bcda09c62cc58bd63186bdb3.html
数字滤波器要求输入、输出信号均为数字信号。
数字滤波器(Digital Filter)通常是指一个用有限精度算法实现的离散线性时不变系统。因此它具有线性时不变系统的所有特性。
幅频响应表示信号通过该滤波器后各频率成分的衰减情况,而相频响应反映各频率成分通过滤波器后在时间上的延时情况。
多相滤波是将信号按照一定的规则分组,即抽取。同时将滤波器的冲击响应按照同样的规则分组,将对应的组进行卷积,得到一路的输出信号,最后将多路的信号重新排列得到输出信号。即先进行抽取再进行滤波,同传统的先滤波在抽取的滤波器比较多相滤波是一种很高效的滤波方式,因为传统的滤波在最后抽取的时候会丢掉很多没被抽取到但经过滤波的信号。同时多相滤波器每一路的运算量都大大减小,所以相对高效。
多相滤波过程式按照相位均匀划分把数字滤波器的系统函数H(z)分解成若干个具有不同相位的组,形成多个分支,在分支上实现滤波。
采用多相滤波结构,可利用多个阶数较低的滤波来实现原本阶数较高的滤波,而且每个分支滤波器处理的数据率仅为原数据率的I/D,这为工程上高速实时信号处理提供了实现途径。
来源:http://blog.sina.com.cn/s/blog_5d70c9e30101aiyi.html
线性相位滤波器
1、相位随频率变化的曲线。它代表各频率分量在时间原点所具有的相位。
滤波器的阶数,就是指过滤谐波的次数,一般来讲,同样的滤波器,其阶数越高,滤波效果就越好,但是,阶数越高,成本也就越高,因此,选择合适的阶数是非常重要的。
在我们描述一个滤波器时,会通过一组系数来确定滤波器的性能,用MATLAB的FDATOOL设计滤波器时,实际上就是我们设定参数,让它产生一组系数来实现,描述这个滤波器的系数的个数就是滤波器的长度,我们知道,滤波过程就是一个卷积过程,是让信号序列和这一组系数去卷积,滤波后的长度按卷积时的长度计算就是(信号序列长度+滤波器长度-1),这里讲的滤波器长度就应该是滤波器的系数个数。
滤波器,每一级都保存了一个经过延时的输入样值,各级的输入连接和输出连接被称为抽头。一个M 阶的FIR 滤波器将有M+1个抽头。