FPGA|CPLD|ASIC论坛
直播中

Elecfans管家

11年用户 3163经验值
擅长:可编程逻辑 测量仪表
私信 关注
[问答]

【FPGA每周一练】FPGA的HDL建模第三周

`FPGA每周一练】FPGA的HDL建模第三周

小编有话讲:各位用户朋友们,我们的每周一练在@chenchu0910 的付出与大家的支持下,已经迎来了第三周,看到有很多朋友一直在跟着练习,我们都感到很欣慰,希望电子发烧友以后能给大家提供更多的学习机会,也希望大家踊跃发言,我们愿与您携手共进,希望在这里能给您一片自由的学习与交流天地!

上周问题答案如下:
问题1:设计一个10进制计数器;源代码如下:
  1. module count(clk,rstn,en,dout);
  2.   input          clk,rstn,en;
  3.   output        reg        [4:0]        dout;

  4. always@(posedge clk or negedge rstn)
  5.         if (!rstn)
  6.                 dout<=4'b0000;
  7.         else
  8.                 if(en==1'b1)
  9.                         begin
  10.                         if(dout==4'b1010)
  11.                                 dout<=4'b0000;
  12.                         else
  13.                                 dout<=dout+1;
  14.                         end
  15. endmodule



波形图如下:

每周3.bmp

问题2:设计3-8译码器。源代码如下:
  1. module decode(Ain,en,dout);
  2.   input                                [2:0]         Ain;
  3.   input                                                en;
  4.   output        reg                [7:0]        dout;

  5. always@(en or Ain)
  6.         if(en==1'b1)
  7.                 case(Ain)
  8.                         3'b000: dout <= 8'b11111110;
  9.                         3'b001: dout <= 8'b11111101;
  10.                         3'b010: dout <= 8'b11111011;
  11.                         3'b011: dout <= 8'b11110111;
  12.                         3'b100: dout <= 8'b11101111;
  13.                         3'b101: dout <= 8'b11011111;
  14.                         3'b110: dout <= 8'b10111111;
  15.                         3'b111: dout <= 8'b01111111;
  16.                 endcase
  17.     else
  18.          dout<=8'b11111111;
  19. endmodule




波形图如下:



以上便是第二周的答案,小伙伴们做对了吗?
分割.png

本周题目是:用Verilog HDL设计


1、8位循环移位寄存器


2、D触发器(上升沿触发)


下周题目预告:各类触发器


往期回顾:                                                                                                   【FPGA每周一练】FPGA的HDL建模第一练
【FPGA每周一练】FPGA的HDL建模第二周



` 每周32.bmp

回帖(8)

泡芙奶昔

2014-12-3 16:55:40
我来写一个8位循环移位寄存器
  1. module yiweijicun(in,out,clk,rst);
  2. input [7:0] in;
  3. input clk,rst,load;
  4. output out;
  5. reg out;
  6. reg [7:0] temp;

  7. always @(posedge clk)

  8. begin
  9.         if (!rst)
  10.            out=0;
  11.         else begin
  12.              if(!load)   
  13.                  temp=in;
  14.              else begin
  15.                   out=temp[7];
  16.                   temp[7]=temp[6];
  17.                   temp[6]=temp[5];
  18.                   temp[5]=temp[4];
  19.                   temp[4]=temp[3];
  20.                   temp[3]=temp[2];
  21.                   temp[2]=temp[1];
  22.                   temp[1]=temp[0];
  23.                   end
  24.               end
  25. end

举报

Oo时间小鱼oO

2014-12-3 20:19:28
看看,学习一下
举报

h1654155757.3649

2014-12-3 21:00:03
  1. //8位移位寄存器
  2. module shift8bit(
  3. input wire clk,
  4. input wire clr,
  5. input wire datain,
  6. output reg [7:0]qout
  7.     );

  8. always @ (posedge clk or posedge clr)
  9.         begin
  10.         if(clr == 1)
  11.                 begin
  12.                 qout <= 0;
  13.                 end
  14.         else
  15.                 begin
  16.                         qout[7] <= datain;
  17.                         qout[6:0] <= qout[7:1];
  18.                 end
  19.         end


  20. endmodule
  21. //D触发器
  22. module DFF(
  23. input wire clk,
  24. input wire clr,
  25. input wire d,
  26. output reg q
  27. );

  28. always @ (posedge clk or posedge clr)
  29.         begin
  30.         if(clr == 1)
  31.                 begin
  32.                 q <= 0;
  33.                 end
  34.         else
  35.                 begin
  36.                         q <= d;
  37.                 end
  38.         end
  39. endmodule


顺便谁能给个testbench的好教程?谢谢了!
1 举报

谢晖

2014-12-5 14:57:46
学习了。。。谢谢
举报

Peabago

2014-12-6 08:54:38
楼主,你好!我刚接触FPGA,请问要参加你们的每周一练活动,需要安装什么软件呢?Xilinx的13.4版本可以吗?还需要其他的工具吗?
1 举报
  • chenchu0910: 新学的,建议多写写代码,用modelsim 进行功能仿真,在用ISE综合下载到开发板看看结果。

天使的名字就是

2014-12-6 14:15:38
  1. module shiftreg(clk,rst,D,Dout);
  2. input D,clk,rst;
  3. output[7:0] Dout;
  4. reg[7:0] Dout;
  5. always @(posedge clk or negedge rst)
  6.      begin
  7.             if(~rst) Dout<=8'b00000000;
  8.                  else     Dout<={Dout[6:0],D};
  9.      end
  10. endmodule


举报

8051DPJ

2014-12-9 21:08:13
哇,这么多FPGA高手啊




举报

刘正

2015-9-20 19:17:52
输入端没有预置数控制端与预制数,加上输出端没有进位信号,过于简单,没啥实用性。。。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分