在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
楼主: KongDu

[求助] Verilog 接口问题

[复制链接]
 楼主| 发表于 2023-2-20 23:00:05 | 显示全部楼层


PayPal 发表于 2023-2-20 17:51
不会,只是增加一些布线


请问是这个样子的吗, 然后额外加一个always块将这两个对应的位连接起来?


                               
登录/注册后可看大图


发表于 2023-2-21 10:42:46 | 显示全部楼层


KongDu 发表于 2023-2-20 15:38
这个方式我试过, 但是会给出语法的报错


不知道你用的是不是Vivado,在Verilog-2001标准下数组端口的确会报错,你在vivado里改成System Verilog规则就好了
 楼主| 发表于 2023-2-21 16:19:33 | 显示全部楼层


zx7504081 发表于 2023-2-21 10:42
不知道你用的是不是Vivado,在Verilog-2001标准下数组端口的确会报错,你在vivado里改成System Verilog规 ...


  • 我用的是vivado, 改成System Verilog 标准的话, 是否也需要将文件的后缀改成.sv?
  • 对于System Verilog 编写的程序, 可否作为电路的设计程序而综合呢? 还是只能作为验证程序作为激励文件?

发表于 2023-2-21 19:41:56 | 显示全部楼层
用 generate for
发表于 2023-2-21 20:18:50 | 显示全部楼层
gvim  tcl  学两下批量改就行
发表于 2023-2-22 13:40:17 | 显示全部楼层
如果你只是不想1行行写类似的代码,完全可以用generate代替。
发表于 2023-2-23 09:12:45 | 显示全部楼层
本帖最后由 PayPal 于 2023-2-23 09:14 编辑


KongDu 发表于 2023-2-20 23:00
请问是这个样子的吗, 然后额外加一个always块将这两个对应的位连接起来?

...


差不多是这个样子了,一般使用generate for+assign将输入数据进行分组成二维数组。





  1. generate for(i=0;i<512;i=i+1)
  2. begin
  3.     assign data[i] = i_data[i*16 +: 16];
  4. end
  5. endgenerate


复制代码

发表于 2023-2-27 10:51:43 | 显示全部楼层
模块内如何使用,端口就如何定义。二维数组作为模块接口已经很普遍了,最新版本的工具都不会报ERROR的
发表于 2023-2-27 15:58:18 | 显示全部楼层
以下是GPT的回答:

在 Verilog 中,可以使用 generate 块和 for 循环结构来生成并行输出的端口,以减少硬件开销和提高代码复用性。下面是一个例子,演示如何使用 generate 块和 for 循环结构生成并行输出端口:




  1. module parallel_output
  2.   #(parameter DATA_WIDTH = 8, parameter PORT_NUM = 4)
  3.   (input clk,
  4.    input rst,
  5.    input [DATA_WIDTH-1:0] data_in,
  6.    output [PORT_NUM-1:0] out_valid,
  7.    output [PORT_NUM-1:0] [DATA_WIDTH-1:0] data_out);

  8.   genvar i;
  9.   generate
  10.     for (i = 0; i < PORT_NUM; i = i + 1) begin : output_ports
  11.       assign out_valid[i] = 1'b1;
  12.       assign data_out[i] = data_in;
  13.     end
  14.   endgenerate

  15. endmodule



复制代码
在上面的例子中,generate 块内的 for 循环会生成 PORT_NUM 个并行输出端口。out_valid 信号是一个 PORT_NUM 位的向量,每个位表示对应的输出端口是否有效。data_out 是一个 PORT_NUM 行 DATA_WIDTH 列的矩阵,每一行代表一个输出端口的数据。在 for 循环中,使用 assign 语句将输入信号 data_in 赋值给每一个输出端口的 data_out,并且将 out_valid 设置为 1,表示所有输出端口均有效。
这样,可以通过修改 PORT_NUM 和 DATA_WIDTH 参数的值来生成不同数量和宽度的并行输出端口,从而实现代码的灵活性和复用性。需要注意的是,在使用 generate 块和 for 循环结构时,生成的端口必须具有相同的宽度,否则会出现错误。


2.png
发表于 2023-2-27 16:31:53 | 显示全部楼层
用并行转穿行方式不会额外增加硬件开销,最终综合资源一样。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-16 07:32 , Processed in 0.038119 second(s), 7 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表