求高手帮助:C写二进制文件 verilog读该文件

jiayinta 2011-05-09 10:21:30
现在需要用c语言将一个整型数组写进二进制文件,然后verilog读这个文件,将二进制文件中的整型数据读出来存放到reg

中。该如何实现?求高手帮助,麻烦您写一个简单的例子:将12,23,34写进二进制文件test.dat,然后verilog读这个文件,

将这三个数读出存放在reg a1,reg a2,reg a3中。
...全文
656 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq409745367 2011-07-20
  • 打赏
  • 举报
回复
因为C写出的文件格式和verilog可以读的文件格式可能不兼容
qq409745367 2011-07-20
  • 打赏
  • 举报
回复
这个问题应该没解决吧
bsnow 2011-05-25
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 jiayinta 的回复:]
引用 5 楼 net_friends 的回复:
verilog读文件只适用于仿真,对于实际硬件,因该做一块rom或者ram,或者其他,把数据存进去

那这个rom是怎么做?
我用readmemb函数,编译后存储器全0,如果用modelsim存储器里就会有数据,为什么?我必须要用quartus
[/Quote]

你如果只是做仿真可以读文件数据就可以,但是如果要综合到硬件里面需要用rom。
具体方式:Tools->MegaWizard Plug-In Manager
然后选 Memory Compiler->ROM:1-PORT(点NEXT 记得写名字)
然后设置位宽储存深度,你们有个数据存储文件选择你要写入数据的文件。文件格式可以是.mif或者.hex。
给你个关于.mif文件的格式样板你自己改

% MATLAB生成mif文件
by bsnow
2011/2/18 %


DEPTH = 256; -- The size of data in bits
WIDTH = 16; -- The size of memory in words
ADDRESS_RADIX = HEX; -- The radix for address values
DATA_RADIX = DEC; -- The radix for data values
CONTENT -- start of (address : data pairs)
BEGIN -- memory address : data
0 : 0;
1 : 807;
2 : 1614;
3 : 2420;
4 : 3224;
5 : 4027;
6 : 4827;
7 : 5624;
8 : 6417;
9 : 7207;
A : 7992;
B : 8773;
C : 9548;
D : 10317;
E : 11080;
F : 11837;
10 : 12586;
11 : 13328;
12 : 14061;
13 : 14786;
14 : 15502;
15 : 16208;
16 : 16905;
17 : 17592;
18 : 18267;
19 : 18932;
1A : 19585;
1B : 20226;
1C : 20855;
1D : 21472;
1E : 22075;
1F : 22665;
20 : 23241;
21 : 23803;
22 : 24351;
23 : 24883;
24 : 25401;
25 : 25903;
26 : 26390;
27 : 26860;
28 : 27315;
29 : 27752;
2A : 28173;
2B : 28577;
2C : 28963;
2D : 29332;
2E : 29683;
2F : 30016;
30 : 30330;
31 : 30627;
32 : 30904;
33 : 31163;
34 : 31403;
35 : 31624;
36 : 31826;
37 : 32008;
38 : 32171;
39 : 32315;
3A : 32439;
3B : 32543;
3C : 32627;
3D : 32692;
3E : 32737;
3F : 32761;
40 : 32766;
41 : 32751;
42 : 32717;
43 : 32662;
44 : 32587;
45 : 32493;
46 : 32379;
47 : 32246;
48 : 32092;
49 : 31920;
4A : 31728;
4B : 31516;
4C : 31286;
4D : 31036;
4E : 30768;
4F : 30481;
50 : 30175;
51 : 29851;
52 : 29510;
53 : 29150;
54 : 28772;
55 : 28377;
56 : 27965;
57 : 27536;
58 : 27090;
59 : 26627;
5A : 26149;
5B : 25654;
5C : 25144;
5D : 24619;
5E : 24079;
5F : 23524;
60 : 22955;
61 : 22372;
62 : 21775;
63 : 21165;
64 : 20542;
65 : 19907;
66 : 19260;
67 : 18601;
68 : 17931;
69 : 17250;
6A : 16558;
6B : 15856;
6C : 15145;
6D : 14425;
6E : 13695;
6F : 12958;
70 : 12212;
71 : 11459;
72 : 10700;
73 : 9933;
74 : 9161;
75 : 8383;
76 : 7600;
77 : 6813;
78 : 6021;
79 : 5226;
7A : 4427;
7B : 3626;
7C : 2822;
7D : 2017;
7E : 1211;
7F : 404;
80 : -404;
81 : -1211;
82 : -2017;
83 : -2822;
84 : -3626;
85 : -4427;
86 : -5226;
87 : -6021;
88 : -6813;
89 : -7600;
8A : -8383;
8B : -9161;
8C : -9933;
8D : -10700;
8E : -11459;
8F : -12212;
90 : -12958;
91 : -13695;
92 : -14425;
93 : -15145;
94 : -15856;
95 : -16558;
96 : -17250;
97 : -17931;
98 : -18601;
99 : -19260;
9A : -19907;
9B : -20542;
9C : -21165;
9D : -21775;
9E : -22372;
9F : -22955;
A0 : -23524;
A1 : -24079;
A2 : -24619;
A3 : -25144;
A4 : -25654;
A5 : -26149;
A6 : -26627;
A7 : -27090;
A8 : -27536;
A9 : -27965;
AA : -28377;
AB : -28772;
AC : -29150;
AD : -29510;
AE : -29851;
AF : -30175;
B0 : -30481;
B1 : -30768;
B2 : -31036;
B3 : -31286;
B4 : -31516;
B5 : -31728;
B6 : -31920;
B7 : -32092;
B8 : -32246;
B9 : -32379;
BA : -32493;
BB : -32587;
BC : -32662;
BD : -32717;
BE : -32751;
BF : -32766;
C0 : -32761;
C1 : -32737;
C2 : -32692;
C3 : -32627;
C4 : -32543;
C5 : -32439;
C6 : -32315;
C7 : -32171;
C8 : -32008;
C9 : -31826;
CA : -31624;
CB : -31403;
CC : -31163;
CD : -30904;
CE : -30627;
CF : -30330;
D0 : -30016;
D1 : -29683;
D2 : -29332;
D3 : -28963;
D4 : -28577;
D5 : -28173;
D6 : -27752;
D7 : -27315;
D8 : -26860;
D9 : -26390;
DA : -25903;
DB : -25401;
DC : -24883;
DD : -24351;
DE : -23803;
DF : -23241;
E0 : -22665;
E1 : -22075;
E2 : -21472;
E3 : -20855;
E4 : -20226;
E5 : -19585;
E6 : -18932;
E7 : -18267;
E8 : -17592;
E9 : -16905;
EA : -16208;
EB : -15502;
EC : -14786;
ED : -14061;
EE : -13328;
EF : -12586;
F0 : -11837;
F1 : -11080;
F2 : -10317;
F3 : -9548;
F4 : -8773;
F5 : -7992;
F6 : -7207;
F7 : -6417;
F8 : -5624;
F9 : -4827;
FA : -4027;
FB : -3224;
FC : -2420;
FD : -1614;
FE : -807;
FF : -0;
END;
jiayinta 2011-05-24
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 net_friends 的回复:]
verilog读文件只适用于仿真,对于实际硬件,因该做一块rom或者ram,或者其他,把数据存进去
[/Quote]
那这个rom是怎么做?
我用readmemb函数,编译后存储器全0,如果用modelsim存储器里就会有数据,为什么?我必须要用quartus
tyrone3000 2011-05-24
  • 打赏
  • 举报
回复
这个问题很复杂,我还没学到这么深,高手解答
net_friends 2011-05-23
  • 打赏
  • 举报
回复
verilog读文件只适用于仿真,对于实际硬件,因该做一块rom或者ram,或者其他,把数据存进去
jiayinta 2011-05-21
  • 打赏
  • 举报
回复
[Quote=引用楼主 jiayinta 的回复:]
现在需要用c语言将一个整型数组写进二进制文件,然后verilog读这个文件,将二进制文件中的整型数据读出来存放到reg

中。该如何实现?求高手帮助,麻烦您写一个简单的例子:将12,23,34写进二进制文件test.dat,然后verilog读这个文件,

将这三个数读出存放在reg a1,reg a2,reg a3中。
[/Quote]
quartus ii不支持这函数,怎么办?
jiayinta 2011-05-21
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 chenm001 的回复:]
我都是用C产生一个文本文件,然后使用$readmem读取到reg数组的,下面是例子
if (binary)
$readmemb(file, arr, lo, hi);
else
$readmemh(file, arr, lo, hi);
[/Quote]
请问您,这个 $readmemb(file, arr, lo, hi);中的参数是怎么得到?
chenm001 2011-05-14
  • 打赏
  • 举报
回复
我都是用C产生一个文本文件,然后使用$readmem读取到reg数组的,下面是例子
if (binary)
$readmemb(file, arr, lo, hi);
else
$readmemh(file, arr, lo, hi);
jnwsh 2011-05-09
  • 打赏
  • 举报
回复
$sscanf(fid,"%d",a1);

6,125

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 硬件设计
社区管理员
  • 硬件设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧