微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > verilog 语法求助

verilog 语法求助

时间:10-02 整理:3721RD 点击:
不知道这句是什么意思啊?
for (i =0; i<2; i=i+1)
begin
   A=B[i*64 +:64];
end
哪位大侠能说一下 A=B[i*64 +:64];具体是怎么赋值的啊,多谢!

+:在Verilog中是什么操作符?还真没看过。

太高深了

没见过

i think u had a typo here, and the whole thing should be in a generate block...
genvar i;
generate
begin
for (i =0; i<2; i=i+1)
begin
  assign A[i]=B[i*64+64:i*64];
end
end
endgenerate
就是从B中选每64个bit给A

this is the so-called "Indexed vector part selects"
在Verilog-1995中,可以选择向量的任一位输出,也可以选择向量的连续几位输出,不过此时连续几位的始末数值的index需要是常量。而在Verilog-2001中,可以用变量作为index,进行part select。
[base_expr +: width_expr] //positive offset
[base_expr -: width_expr] //negative offset
       其中base_expr可以是变量,而width_expr必须是常量。+:表示由base_expr向上增长width_expr位,-:表示由base_expr向上递减width_expr位。例如:
reg [63:0] word;
reg [3:0] byte_num; //a value from 0 to 7
wire [7:0] byteN = word[byte_num*8 +: 8];
       如果byte_num的值为4,则word[39:32]赋值给byteN。
when you have any question on verilog, the first idea should turn to 'verilog specification' for help.

楼上正解!
不过,对于这些高级的语法,可读性好象并不好,至少还是有很多人看不懂 -:)
如果这样写:
wire [7:0] byteN = word[(byte_num*8+8) : byte_num*8];
这样写看者笨点,但是不是更直观呢?
请大家拍转了。

原来还有这样用法

...

学习到了,还可以这样用

教程上怎么没见过这样的用法啊。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top