[求助] Verilog多个模块怎么整合到一块,然后通过下载线下载到FPGA里边呢,谢谢

luoqingqun   2014-5-10 18:44 楼主
大家好,这是我在书上找的几个模块,都用Quartus编译通过了,但是我现在要把他们整合在一起,实现一个完整的功能,在Quartus上该怎么做呢,谢谢大家了
DS18B20的温度测量模块
module temperature(clk,dq,d,cont,temp);
input clk;
input dq;
output d;
output cont;
output[9:0] temp;
reg d;
reg cont;
reg[9:0] temp;
reg data;
reg[6:0] num;
reg[6:0] count;
reg[9:0] t;
always @(posedge clk)
begin
  num=num+1;
  if(num>'b1000100)
    begin num='b0000000;
     if(count=='b1001011)
       begin count='b0000000;end
     else
       begin count=count+1;end
     end
   else
   begin num=num+1;end
if(count>='b0000000&&count<='b0000110)
  begin data=0;cont=0;end
else if(count>'b0000110&&count<='b0001101)
  begin cont<=0;end
else if(count=='b0001110||count=='b0001111||count=='b0010010||count=='b0010011)
  begin
     if(num>='b0000000&&num<'b0111100)
        begin data=0;cont=1;end
     else
        begin cont=0;end
   end
else if(count=='b0010000||count=='b0010001||count=='b0010100||count=='b0010101)
  begin
     if(num>='b0000000&&num<'b0001010)
        begin data=0;cont=1;end
     else
        begin cont=0;end
   end
else if(count=='b0010110||count=='b0010111||count=='b0011001||count=='b0011010||count=='b0011011||count=='b0011101)//convert'0'
  begin
     if(num>='b0000000&&num<'b0111100)
        begin data=0;cont=1;end
     else
        begin cont=0;end
   end
else if(count=='b0011000||count=='b0011100)  
  begin
     if(num>='b0000000&&num<'b0001010)
        begin data=0;cont=1;end
     else
        begin cont=0;end
   end
else if(count>='b0011110&&count<='b0100100)
   begin data=0;cont=0;end
else if(count>='b0100101&&count<='b0101011)
   begin cont=0;end
else if(count=='b0101100||count=='b0101101||count=='b0110000||count=='b0110001)
  begin
     if(num>='b0000000&&num<'b0111100)
        begin data=0;cont=1;end
     else
        begin cont=0;end
   end
else if(count=='b0101110||count=='b0101111||count=='b0110010||count=='b0110011)  
  begin
     if(num>='b0000000&&num<'b0001010)
        begin data=0;cont=1;end
     else
        begin cont=0;end
   end
else if(count=='b0110100||count=='b0111010)
   begin
     if(num>='b0000000&&num<'b0111100)
         begin data=0;cont=1;end
     else
         begin cont=0;end
    end
else if(count=='b0110101||count=='b0110110||count=='b0110111||count=='b01110000||count=='b0111001||count=='b0111011)
   begin
     if(num>='b0000000&&num<'b0001010)
         begin data=0;cont=1;end
     else
         begin cont=0;end
    end
else if(count=='b0111100)
   begin
     if(num<='b0000000&&num<'b0001010)
      begin data=0;cont=1;end
      else
          begin cont=0;end
      if(num=='b0001110)
          begin t[0]=dq;end
    end
else if(count=='b0111101)
   begin
     if(num<='b0000000&&num<'b0001010)
     begin data=0;cont=1;end
      else
          begin cont=0;end
      if(num=='b0001110)
          begin t[1]=dq;end
    end
else if(count=='b0111110)
   begin
     if(num<='b0000000&&num<'b0001010)
     begin data=0;cont=1;end
      else
          begin cont=0;end
      if(num=='b0001110)
          begin t[2]=dq;end
    end
else if(count=='b0111111)
   begin
     if(num<='b0000000&&num<'b0001010)
     begin data=0;cont=1;end
      else
          begin cont=0;end
      if(num=='b0001110)
          begin t[3]=dq;end
    end
else if(count=='b1000000)
   begin
     if(num<='b0000000&&num<'b0001010)
     begin data=0;cont=1;end
      else
          begin cont=0;end
      if(num=='b0001110)
          begin t[4]=dq;end
    end
else if(count=='b1000001)
   begin
     if(num<='b0000000&&num<'b0001010)
     begin data=0;cont=1;end
      else
          begin cont=0;end
      if(num=='b0001110)
          begin t[5]=dq;end
    end
else if(count=='b1000010)
   begin
     if(num<='b0000000&&num<'b0001010)
     begin data=0;cont=1;end
      else
          begin cont=0;end
      if(num=='b0001110)
          begin t[6]=dq;end
    end
else if(count=='b1000011)
   begin
     if(num<='b0000000&&num<'b0001010)
     begin data=0;cont=1;end
      else
          begin cont=0;end
      if(num=='b0001110)
          begin t[7]=dq;end
    end
else if(count=='b1000100)
   begin
     if(num<='b0000000&&num<'b0001010)
     begin data=0;cont=1;end
      else
          begin cont=0;end
      if(num=='b0001110)
          begin t[8]=dq;end
    end
else if(count=='b1000101)
   begin
     if(num<='b0000000&&num<'b0001010)
     begin data=0;cont=1;end
      else
          begin cont=0;end
      if(num=='b0001110)
          begin t[9]=dq;end
    end
  d=data;
  temp=t;
end
endmodule
温度显示模块  
module Two_to_ten(temp,inte_ten,inte_one,deci_ten,deci_one,dot);
input[9:0] temp;
output[3:0] inte_ten;
output[3:0] inte_one;
output[3:0] deci_ten;
output[3:0] deci_one;
output dot;
reg[3:0] inte_ten;
reg[3:0] inte_one;
reg[3:0] deci_ten;
reg[3:0] deci_one;
reg dot;
reg[9:0] t;
reg[3:0] deci;
reg[5:0] inte;
always @(inte,deci,t,temp)
begin
  dot<=1;
  begin t<=temp;end
  inte<=t[9:4];
  deci<=t[3:0];
if(inte<'b011110)
     begin
       if(inte>='b001010)
          begin
            if(inte>='b010100)
              begin inte_ten<='b0010;
                  if(inte=='b010100)
                     begin inte_one<='b0000;end
                  if(inte=='b010101)
                     begin inte_one<='b0001;end
                  if(inte=='b010110)
                     begin inte_one<='b0010;end
                  if(inte=='b010111)
                     begin inte_one<='b0011;end
                  if(inte=='b011000)
                     begin inte_one<='b0100;end
                  if(inte=='b011001)
                     begin inte_one<='b0101;end
                  if(inte=='b011010)
                     begin inte_one<='b0110;end
                  if(inte=='b011011)
                     begin inte_one<='b0111;end
                  if(inte=='b011100)
                     begin inte_one<='b1000;end
                  if(inte=='b011101)
                     begin inte_one<='b1001;end
               end
             else
               begin inte_ten<='b0001;
                  if(inte=='b001010)
                     begin inte_one<='b0000;end
                  if(inte=='b001011)
                     begin inte_one<='b0001;end
                  if(inte=='b001100)
                     begin inte_one<='b0010;end
                  if(inte=='b001101)
                     begin inte_one<='b0011;end
                  if(inte=='b001110)
                     begin inte_one<='b0100;end
                  if(inte=='b001111)
                     begin inte_one<='b0101;end
                  if(inte=='b010000)
                     begin inte_one<='b0110;end
                  if(inte=='b01001)
                     begin inte_one<='b0111;end
                  if(inte=='b010010)
                     begin inte_one<='b1000;end
                  if(inte=='b010011)
                     begin inte_one<='b1001;end
                end
              end
            else
              begin inte_ten<='b0000;inte_one<=inte[3:0];end
      end
else if(inte>='b110010)
   begin
      if(inte>='b111100)
        begin inte_ten<='b0110;
                if(inte=='b111100)
                   begin inte_one<='b0000;end
                else if(inte=='b111101)
                   begin inte_one<='b0001;end
                else if(inte=='b111110)
                   begin inte_one<='b0010;end
                else if(inte=='b111111)
                   begin inte_one<='b0011;end
        end
    else
        begin inte_ten<='b0101;
                 if(inte=='b110010)
                    begin inte_one<='b0000;end
                 else if(inte=='b110011)
                    begin inte_one<='b0001;end
                 else if(inte=='b110100)
                    begin inte_one<='b0010;end
                 else if(inte=='b110101)
                    begin inte_one<='b0011;end
                 else if(inte=='b110110)
                    begin inte_one<='b0100;end
                 else if(inte=='b110111)
                    begin inte_one<='b0101;end
                 else if(inte=='b111000)
                    begin inte_one<='b0110;end
                 else if(inte=='b111001)
                    begin inte_one<='b0111;end
                 else if(inte=='b111010)
                    begin inte_one<='b1000;end
                 else if(inte=='b111011)
                    begin inte_one<='b1001;end
          end
    end
else if(inte>='b101000)
   begin
          inte_ten<='b0100;
          if(inte>='b101000&&inte<='b101111)
               begin inte_one[2:0]<=inte[2:0];inte_one[3]<='b0;end
          else if(inte=='b110000)
               begin inte_one<='b1000;end
          else if(inte=='b110001)
               begin inte_one<='b1001;end
    end
else
   begin
           inte_ten<='b0011;
           if(inte=='b011110)
                 begin inte_one<='b0000;end
                 else if(inte=='b011111)
                    begin inte_one<='b0001;end
                 else if(inte=='b100000)
                    begin inte_one<='b0010;end
                 else if(inte=='b100001)
                    begin inte_one<='b0011;end
                 else if(inte=='b100010)
                    begin inte_one<='b0100;end
                 else if(inte=='b100011)
                    begin inte_one<='b0101;end
                 else if(inte=='b100100)
                    begin inte_one<='b0110;end
                 else if(inte=='b100101)
                    begin inte_one<='b0111;end
                 else if(inte=='b100110)
                    begin inte_one<='b1000;end
                 else if(inte=='b100111)
                    begin inte_one<='b1001;end
      end
if(deci[3]=='b1)
    begin
      if(deci[2]=='b1)
         begin
            if(deci[1]=='b1)
               begin
                 if(deci[0]=='b1)
                    begin deci_ten<='b1001;deci_one<='b0100;end
                  else
                    begin deci_ten<='b1000;deci_one<='b1000;end
                end
             else if(deci[0]=='b1)
                begin deci_ten<='b1000;deci_one<='b0001;end
                   else
                      begin deci_ten<='b0111;deci_one<='b0101;end
                end
            else if(deci[1]=='b1)
                 begin
                   if(deci[0]=='b1)
                      begin deci_ten<='b0110;deci_one<='b1001;end
                   else
                      begin deci_ten<='b0110;deci_one<='b0011;end
                  end
            else if(deci[0]=='b1)
                   begin deci_ten<='b0101;deci_one<='b0110;end
                 else
                   begin deci_ten<='b0101;deci_one<='b0000;end
              end
          else if(deci[2]=='b1)
              begin
                 if(deci[1]=='b1)
                   begin
                     if(deci[0]=='b1)
                   begin deci_ten<='b0100;deci_one<='b0100;end
                 else
                   begin deci_ten<='b0011;deci_one<='b1000;end
                    end
        else if(deci[0]=='b1)
                    begin deci_ten<='b0011;deci_one<='b0001;end
                  else
                    begin deci_ten<='b0010;deci_one<='b0101;end
               end
   else if(deci[1]=='b1)
        begin
            if(deci[0]=='b1)
              begin deci_ten<='b0001;deci_one<='b1001;end
            else
              begin deci_ten<='b0001;deci_one<='b0011;end
         end
   else if(deci[0]=='b1)
          begin deci_ten<='b0000;deci_one<='b0110;end
        else
          begin deci_ten<='b0000;deci_one<='b0000;end
end
endmodule                              
BCD--七段译码模块

module seven(i,y);
input[3:0] i;
output[6:0] y;
reg[6:0] y;
always @(i)  
begin
   case(i)
   'b0000:y<='b1111110;
   'b0001:y<='b0110000;
   'b0010:y<='b1101101;
   'b0011:y<='b1111001;
   'b0100:y<='b0110011;
   'b0101:y<='b1011011;
   'b0110:y<='b1011111;
   'b0111:y<='b1110000;
   'b1000:y<='b1111111;
   'b1001:y<='b1111011;
   default:y<='b1111111;
   endcase
end
endmodule
麻烦大家了,帮帮我,老师说要我把他们三个整合到一块,然后仿真时序,最后做实测,说做不出来,就让我延期毕业,痛苦啊,谢谢谢谢大家了
     

回复评论 (11)

沒仔細看每段程式 可以分別創建模塊 連線 編譯
点赞  2014-5-12 09:52
如上面哪位前辈说的,将temperature、Two_to_ten、seven这三个模块分别进行编译,对某个模块进行编译,就将该模块设为顶层实体,各模块编译成功后。 方法一:将各个模块生成.bsf文件,然后新建一个原理图文件,将这三个模块连起来,然后对该原理图文件进行编译。 创建.bsf文件方法:将某模块(.v文件)设为顶层实体,并且打开该模块程序文件,点击file---->creat/update----->creat symbole 。 方法二:创建个.v顶层文件对temperature,Two_to_ten,seven三个模块例化一下。再对这个顶层文件编译。 顶层原理图大致如下(程序我没看) DS18B20.jpg 下面是你的工程文件,编译成功(功能上是否有错不清楚,就看你的代码了)
DS18B20_Temperature.zip (1.53 MB)
(下载次数: 435, 2014-5-13 16:48 上传)
本帖最后由 xuhongming 于 2014-5-13 16:49 编辑
点赞 (1) 2014-5-13 16:22
引用: xuhongming 发表于 2014-5-13 16:22
如上面哪位前辈说的,将temperature、Two_to_ten、seven这三个模块分别进行编译,对某个模块进行编译,就将该模块设为顶层实体,各模块编译成功后。
方法一:将各个模块生成.bsf文件,然后新建一个原理图文件,将这三个模块连起来,然后对该原理图文件进行编译。
        创建.bsf文件方法:将某模块(.v文件)设为顶层实体,并且打开该模块程序文件,点击file---->creat/update----->creat symbole 。
方法二:创建个.v顶层文件对temperature,Two_to_ten,seven三个模块例化一下。再对这个顶层文件编译。

顶层原理图大致如下(程序我没看)

下面是你的工程文件,编译成功(功能上是否有错不清楚,就看你的代码了)

你好,我这边遇到了一些问题,也是模块整合的。关于密码锁的,真心求教,大哥!我的邮箱zhiruixing@qq.com
点赞  2015-4-27 15:19
引用: xuhongming 发表于 2014-5-13 16:22
如上面哪位前辈说的,将temperature、Two_to_ten、seven这三个模块分别进行编译,对某个模块进 ...

你好  你能帮我写一个顶层模块吗?verilog的  是一个空调温度控制的
点赞  2015-6-25 20:49
不得不说,楼主真懒啊!模块化设计,自顶向下,在顶层例化,底层实现功能。这是FPGA设计的重要思想,希望楼主能够早日领悟并运用!网上相关例程数不胜数!
点赞  2015-7-1 22:29
引用: xuhongming 发表于 2014-5-13 16:22
如上面哪位前辈说的,将temperature、Two_to_ten、seven这三个模块分别进行编译,对某个模块进 ...

你好,创建之后如何把图放在一起呢,都是单个图,创建的64位,每次打开都是32位的怎么回事呢
点赞  2017-11-8 21:13
引用: 寒剑孤影 发表于 2015-7-1 22:29
不得不说,楼主真懒啊!模块化设计,自顶向下,在顶层例化,底层实现功能。这是FPGA设计的重要思想,希望楼 ...

模块化设计网上没个详细的例程,起码我搜了俩小时了

点赞  2018-11-30 00:14
同意楼上的观点,楼主真懒,或者就是临时抱佛脚,这个是自己学习的东西,如果后续想在该方面发展,就自己去看看模块化设计是怎么搞得。如果是毕设或者老师或公司的任务,那就出钱,别人给你搞。
点赞  2018-12-2 21:41
引用: 力竹 发表于 2018-11-30 00:14
模块化设计网上没个详细的例程,起码我搜了俩小时了

建议你找一下位置映射和信号名映射,就知道了。每本语法里边都有
点赞  2018-12-2 21:47
楼主你好,你解决的怎么样了,我现在也遇到和你一样的问题
点赞  2019-4-20 16:15
引用: xuhongming 发表于 2014-5-13 16:22 如上面哪位前辈说的,将temperature、Two_to_ten、seven这三个模块分别进行编译,对某个模块进 ...

大哥,请问怎样查看网表呀,谢谢谢谢!

点赞  2020-11-14 23:09
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复