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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 3528|回复: 5

[求助] 在Verilog中有关模块的例化问题。

[复制链接]
发表于 2016-5-10 22:26:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
实在是不知道怎么去例化模块,试着写了,发现有问题,不知道怎么解决?



  1. `timescale 1 ps/ 1 ps

  2. module cordic(clk,rst_n,x,out);
  3. parameter DATA_Length=16;   //数据长度
  4. input     clk;
  5. input     rst_n;
  6. input  [DATA_Length-1:0]  x;    //输入
  7. output [DATA_Length-1:0] out;   //输出
  8. //output [DATA_Length-1:0] x_out;
  9. //reg    [DATA_Length-1:0] x_out;
  10. reg    [DATA_Length-1:0] out;
  11. reg    [DATA_Length-1:0] x0,y0,z0;
  12. reg    [DATA_Length-1:0] x1,y1,z1;
  13. reg    [DATA_Length-1:0] x2,y2,z2;
  14. reg    [DATA_Length-1:0] x3,y3,z3;
  15. reg    [DATA_Length-1:0] x4,y4,z4;
  16. reg    [DATA_Length-1:0] x5,y5,z5;
  17. reg    [DATA_Length-1:0] x6,y6,z6;
  18. reg    [DATA_Length-1:0] x7,y7,z7;
  19. reg    [DATA_Length-1:0] x8,y8,z8;


  20. //初始值赋值//
  21. always @(posedge clk or negedge rst_n)
  22. begin
  23.    if(!rst_n)
  24.       begin
  25.          x0<=16'b0000_0000_0000_0000;
  26.          y0<=16'b0000_0000_0000_0000;
  27.          z0<=16'b0000_0000_0000_0000;
  28.       end
  29.    else
  30.        begin
  31.             x0 <= x+(1>>2);
  32.             y0 <= x-(1>>2);
  33.             z0 <=16'b0000_0000_0000_0000;
  34.          end
  35. end

  36. //level 1 流水线一级
  37. always @(posedge clk or negedge rst_n)
  38. begin
  39.    if(!rst_n)
  40.       begin
  41.          x1<=16'b0000_0000_0000_0000;
  42.          y1<=16'b0000_0000_0000_0000;
  43.          z1<=16'b0000_0000_0000_0000;
  44.       end
  45.    else
  46.         if(y0[15]==1'b0)
  47.             begin
  48.                x1 <= x0 + y0;
  49.                y1 <= y0 - x0;
  50.                z1 <= z0 + 16'h1000;  //45deg
  51.             end
  52.          else
  53.             begin
  54.                x1 <= x0 - y0;
  55.                y1 <= y0 + x0;
  56.                z1 <= z0 - 16'h1000;  //45deg
  57.             end
  58. end

  59. //level 2 流水线二级
  60. always @(posedge clk or negedge rst_n)
  61. begin
  62.    if(!rst_n)
  63.       begin
  64.          x2<=16'h0000 ;
  65.          y2<=16'h0000 ;
  66.          z2<=16'h0000 ;
  67.       end
  68.    else
  69.       
  70.          if(y1[15]==1'b0)
  71.             begin
  72.                x2 <= x1 + {y1[DATA_Length-1],y1[DATA_Length-1:1]};
  73.                y2 <= y1 - {x1[DATA_Length-1],x1[DATA_Length-1:1]};
  74.                z2 <= z1 + 16'h096c;  //26.5651deg
  75.             end
  76.          else
  77.             begin
  78.                x2 <= x1 - {y1[DATA_Length-1],y1[DATA_Length-1:1]};
  79.                y2 <= y1 + {x1[DATA_Length-1],x1[DATA_Length-1:1]};
  80.                z2 <= z1 - 16'h096c;  //26.5651deg
  81.             end
  82. end

  83. //level 3
  84. always @(posedge clk or negedge rst_n)
  85. begin
  86.    if(!rst_n)
  87.       begin
  88.          x3<=16'b0000_0000_0000_0000;
  89.          y3<=16'b0000_0000_0000_0000;
  90.          z3<=16'b0000_0000_0000_0000;
  91.       end
  92.    else
  93.       
  94.          if(y2[15]==1'b0)
  95.             begin
  96.                x3 <= x2 + {{2{y2[DATA_Length-1]}},y2[DATA_Length-1:2]};
  97.                y3 <= y2 - {{2{x2[DATA_Length-1]}},x2[DATA_Length-1:2]};
  98.                z3 <= z2 + 16'h04fa;  //14.0362deg
  99.             end
  100.          else
  101.             begin
  102.               x3 <= x2 - {{2{y2[DATA_Length-1]}},y2[DATA_Length-1:2]};
  103.               y3 <= y2 + {{2{x2[DATA_Length-1]}},x2[DATA_Length-1:2]};
  104.               z3 <= z2 - 16'h04fa;  //14.0362deg
  105.             end
  106. end            
  107.   
  108. //level 4
  109. always @(posedge clk or negedge rst_n)
  110. begin
  111.    if(!rst_n)
  112.       begin
  113.          x4<=16'b0000_0000_0000_0000;
  114.          y4<=16'b0000_0000_0000_0000;
  115.          z4<=16'b0000_0000_0000_0000;
  116.       end
  117.    else
  118.       
  119.          if(y3[15]==1'b0)
  120.             begin
  121.                x4 <= x3 + {{3{y3[DATA_Length-1]}},y3[DATA_Length-1:3]};
  122.                y4 <= y3 - {{3{x3[DATA_Length-1]}},x3[DATA_Length-1:3]};
  123.                z4 <= z3 + 16'h0288;  //7.1250deg
  124.             end
  125.          else
  126.             begin
  127.                x4 <= x3 - {{3{y3[DATA_Length-1]}},y3[DATA_Length-1:3]};
  128.                y4 <= y3 + {{3{x3[DATA_Length-1]}},x3[DATA_Length-1:3]};
  129.                z4 <= z3 - 16'h0288;  //7.1250deg
  130.             end
  131. end

  132. //level 5
  133. always @(posedge clk or negedge rst_n)
  134. begin
  135.    if(!rst_n)
  136.       begin
  137.          x5<=16'b0000_0000_0000_0000;
  138.          y5<=16'b0000_0000_0000_0000;
  139.          z5<=16'b0000_0000_0000_0000;
  140.       end
  141.    else
  142.    
  143.          if(y4[15]==1'b0)
  144.             begin
  145.                x5 <= x4 + {{4{y4[DATA_Length-1]}},y4[DATA_Length-1:4]};
  146.                y5 <= y4 - {{4{x4[DATA_Length-1]}},x4[DATA_Length-1:4]};
  147.                z5 <= z4 + 16'h0145;  // 3.5763 deg
  148.             end
  149.          else
  150.             begin
  151.                x5 <= x4 - {{4{y4[DATA_Length-1]}},y4[DATA_Length-1:4]};
  152.                y5 <= y4 + {{4{x4[DATA_Length-1]}},x4[DATA_Length-1:4]};
  153.                z5 <= z4 - 16'h0145;  // 3.5763 deg
  154.             end
  155. end

  156. //level 6
  157. always @(posedge clk or negedge rst_n)
  158. begin
  159.    if(!rst_n)
  160.       begin
  161.          x6<=16'b0000_0000_0000_0000;
  162.          y6<=16'b0000_0000_0000_0000;
  163.          z6<=16'b0000_0000_0000_0000;
  164.       end
  165.    else

  166.          if(y5[15]==1'b0)
  167.             begin
  168.                x6 <= x5 + {{5{y5[DATA_Length-1]}},y5[DATA_Length-1:5]};
  169.                y6 <= y5 - {{5{x5[DATA_Length-1]}},x5[DATA_Length-1:5]};
  170.                z6 <= z5 + 16'h00a2;  //1.7899deg
  171.             end
  172.          else
  173.             begin
  174.                x6 <= x5 - {{5{y5[DATA_Length-1]}},y5[DATA_Length-1:5]};
  175.                y6 <= y5 + {{5{x5[DATA_Length-1]}},x5[DATA_Length-1:5]};
  176.                z6 <= z5 - 16'h00a2;  //1.7899deg
  177.             end
  178. end
  179. //level 7

  180. always @(posedge clk or negedge rst_n)
  181. begin
  182.    if(!rst_n)
  183.       begin
  184.          x7<=16'b0000_0000_0000_0000;
  185.          y7<=16'b0000_0000_0000_0000;
  186.          z7<=16'b0000_0000_0000_0000;
  187.       end
  188.    else
  189.       
  190.          if(y6[15]==1'b0)
  191.             begin
  192.                x7 <= x6 + {{6{y6[DATA_Length-1]}},y6[DATA_Length-1:6]};
  193.                y7 <= y6 - {{6{x6[DATA_Length-1]}},x6[DATA_Length-1:6]};
  194.                z7 <= z6 + 16'h0051;  // 0.8952deg
  195.             end
  196.          else
  197.             begin
  198.                x7 <= x6 - {{6{y6[DATA_Length-1]}},y6[DATA_Length-1:6]};
  199.                y7 <= y6 + {{6{x6[DATA_Length-1]}},x6[DATA_Length-1:6]};
  200.                z7 <= z6 - 16'h0051;  // 0.8952deg
  201.             end
  202. end  
  203. //level 8
  204. always @(posedge clk or negedge rst_n)
  205. begin
  206.    if(!rst_n)
  207.       begin
  208.          x8<=16'b0000_0000_0000_0000;
  209.          y8<=16'b0000_0000_0000_0000;
  210.          z8<=16'b0000_0000_0000_0000;
  211.       end
  212.    else
  213.       
  214.          if(y7[15]==1'b0)
  215.             begin
  216.                x8 <= x7 + {{7{y7[DATA_Length-1]}},y7[DATA_Length-1:7]};
  217.                y8 <= y7 - {{7{x7[DATA_Length-1]}},x7[DATA_Length-1:7]};
  218.                z8 <= z7 + 16'h0028;  // 0.4476deg
  219.             end
  220.          else
  221.             begin
  222.                x8 <= x7 - {{7{y7[DATA_Length-1]}},y7[DATA_Length-1:7]};
  223.                y8 <= y7 + {{7{x7[DATA_Length-1]}},x7[DATA_Length-1:7]};
  224.                z8 <= z7 - 16'h0028;  // 0.4476deg
  225.             end
  226. end

  227. always @(posedge clk or negedge rst_n)
  228. begin
  229.    if(!rst_n)
  230.      
  231.           out <= 16'b0000_0000_0000_0000;
  232.          
  233.      else
  234.           out <= x8;
  235.                  
  236. end
  237. endmodule       


  238. module sqrt(clk,rst_n,out,x_out)
  239.    input clk,rst_n;
  240.         input [15:0] out;
  241.         output [15:0] x_out;
  242.         reg [15:0] x_out;
  243.        
  244. cordic U1(
  245.            
  246.                           );

  247.         always @ (posedge clk or negedge rst_n)
  248.            if(!rst_n)
  249.                    x_out <= 0;
  250.                 else
  251.                    x_out <= out+(out>>3)+(out>>4)+(out>>6)+(out>>8);
  252.                
  253.        

  254.          




复制代码
希望可以帮忙一下。谢谢。
发表于 2016-5-11 08:38:45 | 显示全部楼层
端口都不连上去你怎么例化的?我晕了
发表于 2016-5-11 09:18:38 | 显示全部楼层
cordic U1(.clk(clk), .rst_n(rst_n), .x(out), .out(x_out));
 楼主| 发表于 2016-5-11 14:00:10 | 显示全部楼层
回复 2# huster 这个 我知道 ,昨天也试着写了一下,但是总是出现错误,端口之间的到底该怎么链接啊。谢谢。
 楼主| 发表于 2016-5-11 14:02:32 | 显示全部楼层
回复 3# haimo 试着用你的编译了一下有错误:Error (10663): Verilog HDL Port Connection error at sqrt.v(261): output or inout port "out" must be connected to a structural net expression。
发表于 2016-5-12 09:06:52 | 显示全部楼层
cordic的输入连 input [15:0] out;
cordic的输出连谁?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

X

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

GMT+8, 2025-6-28 15:50 , Processed in 0.019467 second(s), 7 queries , Gzip On, MemCached On.

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