首页
游戏
影视
直播
广播
听书
音乐
图片
更多
看书
微视
主播
统计
友链
留言
关于
论坛
邮件
推荐
我的硬盘
我的搜索
我的记录
我的文件
我的图书
我的笔记
我的书签
我的微博
Search
1
在IC617中进行xa+vcs数模混仿
81 阅读
2
科普:Memory Compiler生成的Register file和SRAM有何区别?
73 阅读
3
virtuoso和empyrean alps模拟仿真和混仿教程
73 阅读
4
后仿中$setup,$hold与$setuphold
44 阅读
5
文档内容搜索哪家强? 15款文件搜索软件横向评测
35 阅读
默认分类
芯片市场
数字电路
芯片后端
模拟电路
芯片验证
原型与样片验证
算法与架构
DFX与量产封装
PC&Server OS设置
移动OS设置
软件方案
新浪备份
有道备份
登录
Search
标签搜索
python
Docker
vscode
linux
systemverilog
vcs
STM32
PyQT
EDA
FPGA
gvim
cadence
Alist
xilinx
UVM
uos
macos
package
MCU
risc-v
bennyhe
累计撰写
378
篇文章
累计收到
31
条评论
首页
栏目
默认分类
芯片市场
数字电路
芯片后端
模拟电路
芯片验证
原型与样片验证
算法与架构
DFX与量产封装
PC&Server OS设置
移动OS设置
软件方案
新浪备份
有道备份
页面
游戏
影视
直播
广播
听书
音乐
图片
看书
微视
主播
统计
友链
留言
关于
论坛
邮件
推荐
我的硬盘
我的搜索
我的记录
我的文件
我的图书
我的笔记
我的书签
我的微博
搜索到
168
篇与
的结果
2025-07-14
Impulse CoDeveloper C-to-FPGA Tools(2008-06-06 20:07:35)
IImpulse CoDeveloper C-to-FPGA Tools Impulse C™ allows you to compile C-language directly into optimized logic ready for use with popular FPGA devices. Use the Impulse tools to quickly prototype mixed software/hardware systems and perform design iterations in just minutes or hours, instead of days or weeks.http://www.ict.com.tw/ICDesign/impulse/impulse_flow_uni.jpgCoDeveloper C-to-FPGA Tools" TITLE="Impulse CoDeveloper C-to-FPGA Tools" />Impulse C is fully compatible with Xilinx, Altera and other FPGA development tools.CoDeveloper for XilinxCoDeveloper for Altera
2025年07月14日
0 阅读
0 评论
0 点赞
2025-07-14
锁相环PLL (2008-06-06 20:04:09)
PLL技术,其实书上讲的很清楚~在百度上一查就有,这种问题一般是没有人回的~么叫锁相环锁相环是指一种电路或者模块,它用于在通信的接收机中,其作用是对接收到的信号进行处理,并从其中提取某个时钟的相位信息。或者说,对于接收到的信号,仿制一个时钟信号,使得这两个信号从某种角度来看是同步的(或者说,相干的)。由于锁定情形下(即完成捕捉后),该仿制的时钟信号相对于接收到的信号中的时钟信号具有一定的相差,所以很形象地称其为锁相器。而一般情形下,这种锁相环的三个组成部分和相应的运作机理是:1 鉴相器:用于判断锁相器所输出的时钟信号和接收信号中的时钟的相差的幅度;2 可调相/调频的时钟发生器器:用于根据鉴相器所输出的信号来适当的调节锁相器 内部的时钟输出信号的频率或者相位,使得锁相器完成上述的固定相差功能; 3 环路滤波器:用于对鉴相器的输出信号进行滤波和平滑,大多数情形下是一个低通 滤波器,用于滤除由于数据的变化和其他不稳定因素对整个模块的影响。 从上可以看出,大致有如下框图:可见,是一个负反馈环路结构,所以一般称为锁相环(PLL: Phase Locking Loop)锁相环有很多种类,可以是数字的也可以是模拟的也可以是混合的,可以用于恢复载波也可以用于恢复基带信号时钟
2025年07月14日
0 阅读
0 评论
0 点赞
2025-07-14
用MATLAB生成*.mif(QUARTUS II)内存初始化文件
做FPGA设计时经常要调用芯片内存。特别对于ROM,内存的初始化就显得比较重要。当然你完全可以手工在QUARTUS II打开mif文件的表格里或是在EXCEL中逐个输入,几十项(字)或是近百项(字)你还可以接受,如果上千项或是更多呢?估计能累的人吐血!一般内存的初始化数据都是有规律的,符合一定的函数,我们完全可以用MATLAB来完成(如果没规律只能逐项手工输入了)。首先,我们应该知道*.mif文件的格式。它是文本格式。随便打开一个mif文件,你会发现它具有如下的格式:-- Copyright (C) 1991-2007 Altera Corporation-- Your use of Altera Corporation's design tools, logic functions-- and other software and tools, and its AMPP partner logic-- functions, and any output files from any of the foregoing-- (including device programming or simulation files), and any-- associated documentation or information are expressly subject-- to the terms and conditions of the Altera Program -- Subscription Agreement, Altera MegaCore Function -- Agreement, or other applicable agreement, including,-- without limitation, that your use is for the sole purpose of-- programming logic devices manufactured by Altera and sold by-- Altera or its authorized distributors. Please refer to the-- applicable agreement for further details.-- Quartus II generated Memory Initialization File (.mif)WIDTH=8;DEPTH=256;ADDRESS_RADIX=UNS;DATA_RADIX=UNS;CONTENT BEGIN 0:127; 1:126; 2:126; …… …… 253:126; 254:126; 255:127; END;格式很简单吧。首先根据需要设置每个字的位宽WIDTH和总字数DEPTH。然后设置地址和数据的进制基数ADDRESS_RADIX、DATA_RADIX,建议大家不要修改,就使用无符号数(UNS)。然后用MATLAB生成需要的数据(按上边的格式,注意中间“:”,最后“;”),往CONTENT BEGIN和END中间一贴就行了。下边举例说明MATLAB程序的写法,希望对大家有用。%the walue of cosinefunction data=makedataindex = linspace(0,2*pi,2^8); cos_value = cos(index); cos_value = cos_value * (2^7 -1 ); cos_value = fix(cos_value);cos_value =abs(cos_value);for i=65:192cos_value(i)=cos_value(i)+128;end%///////////////////////////////////////上边的用来生成数据,下边的用于控制格式输出(对大家有用的)number=[0:255];for i=1:256comer(i)=':';endfor i=1:256semi(i)=';';enddata=[number; comer; cos_value; semi];fid=fopen('d:\data.txt','w');fprintf(fid, '%d%c%d%c\n', data);fclose(fid);在D盘下找到data.txt文件,用写字板打开mif文件,将data.txt中的内容贴到CONTENT BEGIN和END中间,然后保存就可以了。
2025年07月14日
0 阅读
0 评论
0 点赞
2025-07-14
用MATLAB生成*.hex(QUARTUS II)内存初始化文件 (2008-06-06 19:58:42)
/data_width:存储器输出数据的位宽//address_width:有多少根地址线//filer_path:hex文件路径//filew_path:verilog文件的路径function gene_ram(data_width,address_width,filer_path,filew_path)pidr=fopen(filer_path,'r');pidw=fopen(filew_path,'w');fprintf(pidw,'module mc8051_rom,\n') ;fprintf(pidw,' rom_adr_i,\n');fprintf(pidw,' clk,\n');fprintf(pidw,' rom_data_o,\n');fprintf(pidw,' input[%d:0] rom_adr_i;\n',address_width-1);fprintf(pidw,' input clk;\n');fprintf(pidw,' output[%d:0] rom_data_o;\n',data_width-1);fprintf(pidw,'\n');fprintf(pidw,' reg[%d:0] rom_data_o;\n',data_width-1);fprintf(pidw,'\n');fprintf(pidw,' always @(posedge clk) begin\n');fprintf(pidw,' case(rom_adr_i)\n');tline = fgetl(pidr);tline = fgetl(pidr);while 1tline = fgetl(pidr);/if ~ischar(tline), break, endstr_length = hex2dec(tline(2:3));if str_length ~= 0address = tline(4:7);address_dec = hex2dec(address);address = dec2hex(address_dec);for i = 1:2:str_length*20h_data=tline(i+9:i+10);fprintf(pidw,' %d\''h%s : rom_data_o <= %d\''h%s;\n',address_width,address,data_width,h_data);address_dec = hex2dec(address);address_dec =address_dec +1;address = dec2hex(address_dec);endendendfprintf(pidw,' default : rom_data_o <= %d\''h0;\n',data_width);fprintf(pidw,' endcase\n');fprintf(pidw,' end\n');fprintf(pidw,'endmodule\n');fclose(pidw);fclose(pidr);
2025年07月14日
0 阅读
0 评论
0 点赞
2025-07-14
边缘检测类算法(4) (2008-06-06 19:55:56)
// /// 按水平边缘检测算子进行边缘检测 /// /// /// public Bitmap EdgeDetectHorizontal(Bitmap b) { int[,] kernel = { { 0, 0, 0, 0, 0, 0, 0}, { 0, 0, 0, 0, 0, 0, 0}, {-1, -1, -1, -1, -1, -1, -1}, { 0, 0, 0, 0, 0, 0, 0}, { 1, 1, 1, 1, 1, 1, 1}, { 0, 0, 0, 0, 0, 0, 0}, { 0, 0, 0, 0, 0, 0, 0}, }; MatrixNxN m = new MatrixNxN(); m.Kernel = kernel; return m.Convolute(b); } // end of EdgeDetectHorizontal /// /// 按垂直边缘检测算子进行边缘检测 /// /// /// public Bitmap EdgeDetectVertical(Bitmap b) { int[,] kernel = { { 0, 0, -1, 0, 1, 0, 0}, { 0, 0, -1, 0, 1, 0, 0}, { 0, 0, -1, 0, 1, 0, 0}, { 0, 0, -1, 0, 1, 0, 0}, { 0, 0, -1, 0, 1, 0, 0}, { 0, 0, -1, 0, 1, 0, 0}, { 0, 0, -1, 0, 1, 0, 0}, }; MatrixNxN m = new MatrixNxN(); m.Kernel = kernel; return m.Convolute(b); } // end of EdgeDetectVertical /// /// 边缘增强 /// /// 位图流 /// 阈值 /// public Bitmap EdgeEnhance(Bitmap b, int threshold) { int width = b.Width; int height = b.Height; Bitmap dstImage = (Bitmap)b.Clone(); BitmapData srcData = b.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb); BitmapData dstData = dstImage.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.WriteOnly, PixelFormat.Format32bppArgb); // 图像实际处理区域 // 不考虑最左 1 列和最右 1 列 // 不考虑最上 1 行和最下 1 行 int rectTop = 1; int rectBottom = height - 1; int rectLeft = 1; int rectRight = width - 1; unsafe { byte src = (byte)srcData.Scan0; byte dst = (byte)dstData.Scan0; int stride = srcData.Stride; int offset = stride - width * BPP; int pixel = 0; int maxPixel = 0; // 指向第 1 行 src += stride; dst += stride; for (int y = rectTop; y < rectBottom; y++) { // 指向每行第 1 列像素 src += BPP; dst += BPP; for (int x = rectLeft; x < rectRight; x++) { // Alpha dst[3] = src[3]; // 处理 B, G, R 三分量 for (int i = 0; i < 3; i++) { // 右上-左下 maxPixel = src[i - stride + BPP] - src[i + stride - BPP]; if (maxPixel < 0) maxPixel = -maxPixel; // 左上-右下 pixel = src[i - stride - BPP] - src[i + stride + BPP]; if (pixel < 0) pixel = -pixel; if (pixel > maxPixel) maxPixel = pixel; // 上-下 pixel = src[i - stride] - src[i + stride]; if (pixel < 0) pixel = -pixel; if (pixel > maxPixel) maxPixel = pixel; // 左-右 pixel = src[i - BPP] - src[i + BPP]; if (pixel < 0) pixel = -pixel; if (pixel > maxPixel) maxPixel = pixel; // 进行阈值判断 if (maxPixel < threshold) maxPixel = 0; dst[i] = (byte)maxPixel; } // 向后移一像素 src += BPP; dst += BPP; } // x // 移向下一行 // 这里得注意要多移 1 列,因最右边还有 1 列不必处理 src += offset + BPP; dst += offset + BPP; } // y } // b.UnlockBits(srcData); dstImage.UnlockBits(dstData); b.Dispose(); return dstImage; } // end of EdgeEnhance }
2025年07月14日
0 阅读
0 评论
0 点赞
1
...
28
29
30
...
34