关于FPGA国产FPGA存在的问题题

->【Altera FPGA小组】
湘哥:altera有个参考设计,叫高性能参考设计中使用了DDR或者其他外挂ram,这个外挂ddr怎么和用户逻辑接口啊?我看所有参考设计检验的都是主机对这个ddr的读和写。
骏哥:无论是老器件的altmemphy,还是新器件的uniphy都提供了一组avalon读写总线,
湘哥:altera的参考设计都是cpu对端点存储器的自写自读式的“自娱自乐”。而一般实际中都需要用户写数据,然后cpu读取,或者cpu写数据用户读走。你说的的这个avalon接口在参考设计中只开放给了cpu
提供了一组avalon总线。外部的主端,无论CPU还是其他都可以自由对控制器访问控制。如果你有verilog相关的问题,请进。_verilog吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:3,923贴子:
如果你有verilog相关的问题,请进。收藏
在这个贴吧答题也有很长一段时间了,但是同学们,你们把代码往这里一贴,简单说一句,编译不过,求大神,就完事了,我们看代码看得不知道有多么辛苦。以后如果有人有问题问我,可以在本帖下面留言,本人必定知无不答,答无不尽。但是我更希望你们能够到我个人博客里的“答疑专区”提问,把你们的代码在记事本里粘贴一次去掉格式后,在代码的前面加上[source lang=&verilog&],代码结尾加上[/source],这样发布出来的代码有语法高亮,同时我的个人邮件会收到提问的提醒,以便我及时进行解答。如果大家提的问题具有典型性,我会在个人博客发专题博文进行详细解答。最后贴上自己的博客地址,不是所有的网站域名都是点com结尾的,我的个人博客域名就是我的名字,http冒号//kellen.wang/
专注于verilog八年Intel全球授权verilog中心
好伤心,明明发了贴回答问题,来贴吧提问的人还是自顾自的开新帖求大神,大家就想着自己的问题得到解答,别的都不管吗?
//===========================================================================// File Name
: LATCH_N.v// Module Name : LATCH_N// Description : This is a latch module.// Project
: //===========================================================================module LATCH_N(//Input ports.DATA_IN,LATCH_EN,//Output ports.DATA_OUT);//==========================================================================//Input and output declaration//==========================================================================inputDATA_IN;inputLATCH_EN;outputDATA_OUT;//==========================================================================//Wire and reg declaration//==========================================================================wireDATA_IN;wireLATCH_EN;regDATA_OUT;//==========================================================================//Logic//==========================================================================always @ (DATA_IN or LATCH_EN)begin
if(LATCH_EN)
DATA_OUT= DATA_IN;
DATA_OUT= DATA_OUT;endendmodule
module LATCH_regDATA_IN;regLATCH_EN;wireDATA_OUT;//Instance DUTLATCH_NI_LATCH(.DATA_IN(DATA_IN),.LATCH_EN(LATCH_EN),.DATA_OUT(DATA_OUT));//Latch enablealways #10 LATCH_EN = ~ LATCH_EN;//Data inalways #20 DATA_IN
= ~ DATA_IN;//Initialinitialbegin#0LATCH_EN
= 0;DATA_IN
= 0;endendmodule
求大神看下上面两段程序是什么意思,最好有每步的详细过程哈
有个小问题请问,求一个基本的扫描单元verilog代码,就是一个D触发器和一个两输入多路选择器连在一起的单元代码~
module SigKeyCheck(clkin,resetin,//时钟,复位信号输入key_in,key_in2,//--键输入led1,//--led指示灯,按下后就点亮
led3);input clkin,input key_input key_in2;output led1;output led2;output led3;wire clk_reg led1;reg led2;reg led3;reg [3:0]//分频时钟defparam Gen_ClkDiv.divdFACTOR=24000,Gen_ClkDiv.divdWIDTH=14;//分频出1k的时钟gen_divd Gen_ClkDiv(.reset(!resetin),.clkin(clkin),.clkout(clk_div));//端口名称关联parameter IDLE=2'b00, ASK=2'b01, ANSWER=2'b10, ADD=2'b11;reg [1:0] sk_ always @ (negedge resetin or posedge clk_div)if (!resetin)beginled1&=1'b0;led2&=1'b0;led3&=1'b0;sk_state&=IDLE;cnt&=0;endelsecase(sk_state)
IDLE: begin
if(key_in==1'b0)
sk_state&=ASK;
led1&=1'b1; led2&=1'b0; led3&=1'b0;
sk_state&=IDLE;
led1&=1'b0;led2&=1'b0;led3&=1'b0;end
ASK: begin
if(key_in==1'b0)
sk_state&=ANSWER;
led1&=1'b0;led2&=1'b1;led3&=1'b0;end
else if(key_in2==1'b0) begin
sk_state&=IDLE;
led1&=1'b0;led2&=1'b0;led3&=1'b0;end else
sk_state&=ASK;
led1&=1'b1;led2&=1'b0;led3&=1'b0;end
ANSWER:begin
if(key_in==1'b0)
sk_state&=ADD;
led1&=1'b0; led2&=1'b0; led3&=1'b1; end
sk_state&=ANSWER;
led1&=1'b0; led2&=1'b1; led3&=1'b0;
if(key_in==1'b0)
sk_state&=ASK;
led1&=1'b1; led2&=1'b0; led3&=1'b0; end
sk_state&=ASK;
led1&=1'b1; led2&=1'b0; led3&=1'b0;
default: begin
sk_state&=IDLE;
led1&=1'b0; led2&=1'b0; led3&=1'b0;
想问一下,我这个状态机控制流水灯亮的程序问题,下载到FPGA后,add状态灯没亮过,谢谢
请问这个问题怎么处理呢,关于if语句里面的。module condition(get_dest,get_call,cur_Floor,sel_condition,clk,result); input [6:0] get_ input [11:0] get_ input [1:0] sel_
input [2:0] cur_F
integer flag,i; always @(negedge clk) begin
case(sel_condition) 2'b00: begin
//judge the condition K1 case(cur_Floor)
3'b001:begin
if(get_dest[1]||get_dest[2]||get_dest[3]||get_dest[4]||get_dest[5]||get_dest[6]||get_call[1]||get_call[2]||get_call[3]||get_call[4]||get_call[5]||get_call[6]||get_call[7]||get_call[8]||get_call[9]||get_call[10]||get_call[11]) result=1;
else result=0;
3'b010:begin
if(get_dest[2]||get_dest[3]||get_dest[4]||get_dest[5]||get_dest[6]||get_call[3]||get_call[4]||get_call[5]||get_call[6]||get_call[7]||get_call[8]||get_call[9]||get_call[10]||get_call[11]) result=1;
elseresult=0;
end 3'b011:begin
if(get_dest[3]||get_dest[4]||get_dest[5]||get_dest[6]||get_call[5]||get_call[6]||get_call[7]||get_call[8]||get_call[9]||get_call[10]||get_call[11]) result=1;
else result=0;
3'b100:begin
if(get_dest[4]||get_dest[5]||get_dest[6]||get_call[7]||get_call[8]||get_call[9]||get_call[10]||get_call[11])
3'b101:begin
if(get_dest[5]||get_dest[6]||get_call[9]||get_call[10]||get_call[11])
else result=0;
3'b110:begin if(get_dest[6]||get_call[11]) result=1;
else result=0;
default: result=0; endcase end 2'b01: begin
//judge the condition K2 case(cur_Floor) 3'b111:begin
if(get_dest[0]||get_dest[1]||get_dest[2]||get_dest[3]||get_dest[4]||get_dest[5]||get_call[0]||get_call[1]||get_call[2]||get_call[3]||get_call[4]||get_call[5]||get_call[6]||get_call[7]||get_call[8]||get_call[9]||get_call[10]) result=1;
else result=0;
3'b110:begin
if(get_dest[0]||get_dest[1]||get_dest[2]||get_dest[3]||get_dest[4]||get_call[0]||get_call[1]||get_call[2]||get_call[3]||get_call[4]||get_call[5]||get_call[6]||get_call[7]||get_call[8]) result=1;
else result=0;
3'b101:begin
if(get_dest[0]||get_dest[1]||get_dest[2]||get_dest[3]||get_call[0]||get_call[1]||get_call[2]||get_call[3]||get_call[4]||get_call[5]||get_call[6])
else result=0;
3'b100:begin
if(get_dest[0]||get_dest[1]||get_dest[2]||get_call[0]||get_call[1]||get_call[2]||get_call[3]||get_call[4])
else result=0; end
3'b011:begin if(get_dest[0]||get_dest[1]||get_call[0]||get_call[1]||get_call[2]) result=1;
else result=0;
3'b010:begin
if(get_dest[0]||get_call[0]) result=1;
else result=0;
default: result=0; endcase end 2'b10:
//judge the condition K3 if(cur_Floor==7)result=1;
else begin
if(get_call[2*cur_Floor-2]||get_dest[cur_Floor-1])
else result=0;
end end 2'b11: begin
//judge the condition K4 if(cur_Floor==0) result=1; else begin
if(get_call[2*cur_Floor-3]||get_dest[cur_Floor-1])result=1;
else result=0;
end end endcase end endmodule
大神,小白求教基于verilog的简单逻辑分析仪的设计与验证~毕设等求啊 。。。。
我想请教你不是程序的问题。
为什么我发了代码什么的,它说我在cheating。。。
我在改一个cpld控制dac的程序,请问8'h00:data_dac=12'b;//DACshuchu130mv这句程序等号两边是如何转换的?我这里还有一个公式Vout=Vrefl+(Vrefh-Vrefl)*N/4096先谢过大神
out_data[65:0]={1'b1,check_bit5,
check_byte7,check_byte6,check_byte5,check_byte4,check_byte3,check_byte2,check_byte1,check_byte0,
1'b1,check_bit4,
1'b0,1'b0,1'b0,1'b0,out_data_temp[31],out_data_temp[30],out_data_temp[29],out_data_temp[28],
1'b1,check_bit3,
1'b0,out_data_temp[27],out_data_temp[26],out_data_temp[25],out_data_temp[24], out_data_temp[23],out_data_temp[22],out_data_temp[21],
1'b1,check_bit2,
1'b0,out_data_temp[20],out_data_temp[19],out_data_temp[18],out_data_temp[17], out_data_temp[16],out_data_temp[15],out_data_temp[14],
1'b1,check_bit1,
1'b0,out_data_temp[13], out_data_temp[12],out_data_temp[11],out_data_temp[10],out_data_temp[9],out_data_temp[8],out_data_temp[7],
1'b1,check_bit0,
1'b0,out_data_temp[6],out_data_temp[5],out_data_temp[4],out_data_temp[3], out_data_temp[2],out_data_temp[1],out_data_temp[0],
1'b0};//----------------fog
data[47:0]您好,能帮忙解释下这段语言的含义么,比如如何筛选数据的之类的,作用是什么
我想知道这个Xst:1312 - Loop has iterated 64 times. Use &set -loop_iteration_limit XX& to iterate more. 一般是哪里出了错啊
if条件里不能用signal[index]这种方式引用,除非index是一个固定值,你要知道你设计的是硬件电路,这里的if条件里写的是一根信号线的名字,信号线是不能凭空消失的,他必须是一个确定的连接。
回复 kudo1017 :哦哦
如何用verilog语言实现,一个键按一下,就加1,另一个键按一下,就减1,大神求教。
加扣扣太累,我要做个很简单的,要事愿意接的话短信
你好,我现在需要产生一个200脉冲的信号,在FPGA上用的。现在我只能使用按按键的方法拉低电位来停止脉冲输出。想使用计数器,但是就是不行。下面的代码是用计数器的,但是就是不行module shanshuo3(clk,rst,ma);reg [25:0]reg ma_r;reg [25:0]assign ma=ma_r;always @(posedge clk )if(!rst)begin pulseout &= 1'b0;cnt &= 26'b0;jishuqi &=26'd0;end else begin if(ant == 1'b0)ma_r &= 2'b00;else begin cnt&=cnt+1'b1;ma_r&=if(cnt==50000)pulseout&=1'b1;else if(cnt==100000)begin pulseout&=1'b0;cnt&=26'd0;if(jishuqi == 26'd2000)ant &= 1'b0;else begin if(pulseout == 1'b1)begin jishuqi &= jishuqi + 1'd1;end end endend endmodule
本来是想发到你的博客的,但是都是显示“Are
you cheating huh?”发了几次都是这样,所以贴代码了,对不起啊。
verilog二选一弄死都不出波形
你好,我想问一个关于Verilog操作符的问题。如果用一个算术操作符来对一个正数移位,那么空缺出来的那一位是用0还是1来填?谢谢啦
我在做一个作业,我想让一个数码管在第一二三个脉冲的时候是不亮的,第四个来,显示2。第五个,显示0。第六个,显示0。第七个,显示2,第八个,显示1。第九个,显示4。第十个,显示9。然后第十一个来就不亮,重新循环前面的过程,求大神指点指点,拜托了
大神,你那个博客现在需要注册才能提问,我用邮箱申请注册可是一直木有反应。只好在这提问题了。望见谅。程序如下。这是个直接FIR滤波器。我想问下滤波器的系数-1和3.75是怎么赋值进去的呢?第十二行系数那里不是注释的部分麽?那他是怎么赋值进去的呢?求解答0.0
求问,如何实现卷积码的译码,看了好久都没弄出,告诉我一下具体思路就行,万分感谢!!
大神留个博客我好关注
我想用六个数码管同时显示三组超声波测距数据,我的output
的数码管位选怎么定义啊,三组定义成同一个会显示重复定义,分开定义引脚又不能分配附上顶层模块//top modulemodule sonic(clk,rst_n,trig_1,trig_2,trig_3,echo_1,echo_2,echo_3,sel_1,sel_2,sel_3,data_1,data_2,data_3//位选);input clk,rst_n,echo_1,echo_2,echo_3;output trig_1,trig_2,trig_3;output [1:0]sel_1;output [1:0]sel_2;output [1:0]sel_3;output [7:0]data_1;output [7:0]data_2;output [7:0]data_3;wire [23:0]distance_1;sonic_detect_1
i1(.clk(clk),
.rst_n(rst_n),
.distance_1(distance_1),
.trig_1(trig_1),
.echo_1(echo_1)
i2(.clk(clk),
.rst_n(rst_n),
.distance_1(distance_1),
.sel_1(sel_1),
.data_1(data_1)
);wire [23:0]distance_2;sonic_detect_2
i3(.clk(clk),
.rst_n(rst_n),
.distance_2(distance_2),
.trig_2(trig_2),
.echo_2(echo_2)
i4(.clk(clk),
.rst_n(rst_n),
.distance_2(distance_2),
.sel_2(sel_2),
.data_2(data_2)
);wire [23:0]distance_3;sonic_detect_3
i5(.clk(clk),
.rst_n(rst_n),
.distance_3(distance_3),
.trig_3(trig_3),
.echo_3(echo_3)
i6(.clk(clk),
.rst_n(rst_n),
.distance_3(distance_3),
.sel_3(sel_3),
.data_3(data_3)
);endmodule
楼主您好,我想做的是用三组超声波测距模块分别同时测量三个方向的距离,然后用6位数码管显示,两个数码管显示一组距离值,先面试我的程序。!!!!问题是为什么当我用一个超声波测距模块分别接trig_1,echo_1
trig_2,echo_2
trig_3,echo_3的时候,问题一:这三组数据都是选择最高位的两个数码管显示,而没有对应的选择第三、四,第五、六个数码管问题二:只有接trig_3,echo_3的时候现实的是测距值,其余两组都是显示“00”大神帮忙啊!!!!!!谢谢了module sonic( clk,rst_n, sel,data, trig_1, echo_1, trig_2, echo_2, trig_3, echo_3 );input clk,rst_n;output reg [5:0]output reg [7:0]output trig_1;input echo_1;output trig_2;input echo_2;output trig_3;input echo_3;reg [15:0]cnt1;reg clk_div1always @(posedge clk)begin if(!rst_n)
clk_div1ms&=0;
end else if(cnt1==16'd25000)
clk_div1ms&=~clk_div1
else cnt1&=cnt1+1'b1;endwire [23:0] distance_1;wire [23:0] distance_2;wire [23:0] distance_3;wire [11:0]wire [11:0]assign denom=12'd2900;sonic_detect_1
i1(.clk(clk),
.rst_n(rst_n),
.distance_1(distance_1),
.trig_1(trig_1),
.echo_1(echo_1)
sonic_detect_2
i2(.clk(clk),
.rst_n(rst_n),
.distance_2(distance_2),
.trig_2(trig_2),
.echo_2(echo_2)
);sonic_detect_3
i3(.clk(clk),
.rst_n(rst_n),
.distance_3(distance_3),
.trig_3(trig_3),
.echo_3(echo_3)
wire [23:0]data_reg1; div div_inst1 ( .denom ( denom), .numer (distance_1), .quotient ( data_reg1 ), .remain (remain ) );wire [23:0]data_reg2;div div_inst2 ( .denom ( denom), .numer (distance_2), .quotient ( data_reg2 ), .remain (remain ) );wire [23:0]data_reg3;div div_inst3 ( .denom ( denom), .numer (distance_3), .quotient ( data_reg3 ), .remain (remain ) );
reg [3:0]reg [2:0]always @(posedge clk_div1ms)begin if(!rst_n)
cnt &=3'd0;
num &=4'd0;
sel &=6'd111111;
data&=8'd0;
sel &=6'b11_1110;
num &=data_reg1[7:4];
0: data&=8'h03;
1: data&=8'h9f;
2: data&=8'b;
3: data&=8'b;
4: data&=8'b;
5: data&=8'b;
6: data&=8'b;
7: data&=8'b;
8: data&=8'b;
9 : data &=
10 : data &= 8'b;
11 : data &= 8'b;
12 : data &= 8'b;
13 : data &= 8'b;
14 : data &= 8'b;
15 : data &= 8'b;
cnt &= cnt +1'b1;
sel&=6'b11_1101;
num&=data_reg1[3:0];
0: data&=8'h03;
1: data&=8'h9f;
2: data&=8'b;
3: data&=8'b;
4: data&=8'b;
5: data&=8'b;
6: data&=8'b;
7: data&=8'b;
8: data&=8'b;
9 : data &=
10 : data &= 8'b;
11 : data &= 8'b;
12 : data &= 8'b;
13 : data &= 8'b;
14 : data &= 8'b;
15 : data &= 8'b;
cnt &= cnt +1'b1;
sel&=6'b11_1011;
num&=data_reg2[7:4];
0: data&=8'h03;
1: data&=8'h9f;
2: data&=8'b;
3: data&=8'b;
4: data&=8'b;
5: data&=8'b;
6: data&=8'b;
7: data&=8'b;
8: data&=8'b;
9 : data &=
10 : data &= 8'b;
11 : data &= 8'b;
12 : data &= 8'b;
13 : data &= 8'b;
14 : data &= 8'b;
15 : data &= 8'b;
cnt &= cnt +1'b1;
sel&=6'b11_0111;
num&=data_reg2[3:0];
0: data&=8'h03;
1: data&=8'h9f;
2: data&=8'b;
3: data&=8'b;
4: data&=8'b;
5: data&=8'b;
6: data&=8'b;
7: data&=8'b;
8: data&=8'b;
9 : data &=
10 : data &= 8'b;
11 : data &= 8'b;
12 : data &= 8'b;
13 : data &= 8'b;
14 : data &= 8'b;
15 : data &= 8'b;
cnt &= cnt +1'b1;
sel&=6'b10_1111;
num&=data_reg3[7:4];
0: data&=8'h03;
1: data&=8'h9f;
2: data&=8'b;
3: data&=8'b;
4: data&=8'b;
5: data&=8'b;
6: data&=8'b;
7: data&=8'b;
8: data&=8'b;
9 : data &=
10 : data &= 8'b;
11 : data &= 8'b;
12 : data &= 8'b;
13 : data &= 8'b;
14 : data &= 8'b;
15 : data &= 8'b;
cnt &= cnt +1'b1;
sel&=6'b01_1111;
num&=data_reg3[3:0];
0: data&=8'h03;
1: data&=8'h9f;
2: data&=8'b;
3: data&=8'b;
4: data&=8'b;
5: data&=8'b;
6: data&=8'b;
7: data&=8'b;
8: data&=8'b;
9 : data &=
10 : data &= 8'b;
11 : data &= 8'b;
12 : data &= 8'b;
13 : data &= 8'b;
14 : data &= 8'b;
15 : data &= 8'b;
cnt &= 3'd0;
//接着是3个测距模块
登录百度帐号一个关于fpga输出pwm的问题_百度知道
一个关于fpga输出pwm的问题
本人刚开始学fpga,看到这个输出pwm的程序。但是有些地方有些不太理解望高手帮忙modulepwm(clk,key,led);input[1:0]reg[32:0]reg[9:0]pwm_regfla...
本人刚开始学fpga,看到这个输出pwm的程序。但是有些地方有些不太理解
望高手帮忙module pwm(clk,key,led);input [1:0]reg [32:0]reg [9:0] pwm_reg pwm_always @(posedge clk)begincount=count+1'b1;if (count[13:4] & pwm_count)
pwm_flag=1;elsepwm_flag=0;if (count[15] == 1'b1)
if (flag == 1'b1)
flag= 1'b0;
if (key[0] == 1'b0)
pwm_count=(pwm_count+10'b); else if (key[1] == 1'b0)
pwm_count=(pwm_count-10'b);
else pwm_count=pwm_
flag= 1'b1;endassign led=pwm_endmodule 这句话if (count[13:4] & pwm_count)
//就是这里不太明白 是用pwm_count 和count[13:4]进行比较,但count是一个一直变化的数 对吗?为什么要和一个变化的数字比较呢?另外pwm_count没赋初值,那它初始是一个什么状态呢???问得比较凌乱
答题抽奖
首次认真答题后
即可获得3次抽奖机会,100%中奖。
来自电脑网络类芝麻团
采纳数:236
获赞数:780
参与团队:
用pwm_count 和count[13:4]进行比较;就是要count变呀,不然你的PWM怎么输出呢;因为count在变所以才会出现周期性的大于pwm_count然后小于pwm_count,这样PWM不就出来了了么,PWM的周期就是count[13:0];和count[13:4]比较,省去了低第四位,是怕脉冲为零或者是脉冲过窄,这样IO根本输不出来信号;没有赋初值的很有可能出问题,但基本上都是0;你要加入一个复位信号来初始化那些寄存器,这样做更规范些;以后写程序必须加复位信号;现在你就知道为什么单片机要复位了吧,就是怕里面的寄存器和变量不听话,复位的时候全部从新赋值;单片机说白了就是一个专用IC,FPGA它也可以变成专用IC,所以在FPGA的场合升级很方便,不用把芯片换了,直接升级固件,它就有了新的功能,这一点比专用IC灵活。希望能帮到你。
loveKEYBOARD
loveKEYBOARD
采纳数:437
获赞数:247
这段代码modelsim仿真肯定不能得到结果,但用编译工具,比如quartus编译有可能得到正确的结果,因为你不初始化pwm_count,它会默认初始化为0,一个一直增长的数count[13:4]和一个门限pwm_count,然后决定是输出1还是0,这不就是PWM的精髓么?最好初始化一下:reg [9:0] pwm_count:=10'd0;
本回答被网友采纳
为你推荐:
其他类似问题
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。UID175834&帖子74&精华0&积分1818&资产1818 信元&发贴收入410 信元&推广收入0 信元&附件收入343 信元&下载支出985 信元&阅读权限30&在线时间104 小时&注册时间&最后登录&
<td class="t_msgfont" id="postmessage_. config mem,我觉得理解成FPGA内部的一堆寄存器也许更好理解,虽然寄存器和mem不一样。2. 不是说bit流下进去FPGA里就有这资源。FPGA理的资源就摆在那里,你用或者不用取决于你的代码。例如,MMCM,是FPGA理的一个专门的硬件单元。你不用,就不会配置。你代码理例化了MMCM,就会使用FPGA的MMCM。但问题是,怎么用?拿锁相环来说,锁相环正常工作,你至少要告诉他倍频多少?分频多少?输入频率多少?更复杂的还有,输出时钟的带宽是多少?等等。这些东西是MMCM上的一系列寄存器。值怎么填呢?由bit流来控制。bit流是哪里来的?是ISE或者VIVADO编译出来的,而且是根据你的代码编译出来的。这样,你代码里用了MMCM,那么编译出的bit流就会包含MMCM的配置,下载到FPGA之后就会去配置MMCM的一堆寄存器,然后MMCM就能用了。
3. 再给你举个更详细的例子,LUT。这个ALTERA和XILINX都有,是构成FPGA的主要内容。LUT归根结底就是个SRAM。我们假设要让你实现一个功能,输入两个1bit的信号a,b,输出1bit的信号c,要求c是a和b的抑或。LUT会用来实现这个功能。简单点,假设LUT是2输入的(实际上一般都是四输入或者6输入)。那么LUT的存储空间就是2的2次方就是4,能存4个bit。你程序写 c &= a ^b。编译出来什么呢?会编译出来0110。这4个bit在bit流中,然后拿来下载FPGA。这样FPGA就会有一个LUT,其两个输入口互联到了ab两个信号上,lut的内容是0110。LUT的输出互联到c上。ab相当于这sram的索引地址。于是,当ab分别为,00,01,10,11,这个LUT就会输出0,1,1,0.于是就实现了你 的功能。
明白了吗??
[通过 QQ、MSN 分享给朋友]
有奖下载!《如何利用示波器及高级电源分析软件加速开关电源的设计》}

我要回帖

更多关于 FPGA测频问题 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信