FPGA|CPLD|ASIC论坛
直播中

依山观澜0

4年用户 6经验值
擅长:可编程逻辑 可编程逻辑
私信 关注
[问答]

请问怎么用verilog来描述一个8位数据选择器呀


已退回5积分

回帖(2)

依山观澜0

2021-10-2 17:47:39
module a(
        input [3:0] a,
        input clk,
        input rst_n,

        output reg [7:0] out
);
always@(posedge clk or negedge rst_n)
begin
        if(~rst_n)
        out<=8'b0000_0000;
        else
        case(a)
         3'b000:out[0]=1'b1;
         3'b001:out[1]=1'b1;
         3'b010:out[2]=1'b1;
         3'b011:out[3]=1'b1;
         3'b100:out[4]=1'b1;
         3'b101:out[5]=1'b1;
         3'b110:out[6]=1'b1;
         3'b111:out[7]=1'b1;
        endcase
end
endmodule
2 举报
  • 卿小小_9e6: 如果是独热码(one-hot)的情况,不建议这种写法。
    你的写法容易导致out[0]~out[7]在其他状态出现状态锁存的情况。
  • 依山观澜0 回复 卿小小_9e6: 那应该怎么写呀,能写一下吗

wyysh

2021-10-2 20:48:09
  1. /*******代码********/
  2. `timescale 1ns / 1ps
  3. //////////////////////////////////////////////////////////////////////////////////
  4. // Company:
  5. // Engineer:
  6. //
  7. // Create Date:    19:32:07 10/02/2021
  8. // Design Name:
  9. // Module Name:    xuanzeqi
  10. // Project Name:
  11. // Target Devices:
  12. // Tool versions:
  13. // Description:
  14. //
  15. // Dependencies:
  16. //
  17. // Revision:
  18. // Revision 0.01 - File Created
  19. // Additional Comments:
  20. //
  21. //////////////////////////////////////////////////////////////////////////////////
  22. module xuanzeqi(
  23.          input          clk,
  24.          input          rst_n,
  25.     input [2:0]     sel,      //输入按键       
  26.     output reg[7:0] dout     //输出控制led灯
  27. );

  28. //********************************************************************//
  29. //***************************** Main Code ****************************//
  30. //********************************************************************//

  31. //led_out:led灯输出的结果为key_in按键取反的输入值
  32. always@( posedge clk or negedge  rst_n)
  33.         if(rst_n == 1'b0)
  34.                     dout <= 8'd0;
  35.         else   
  36.                                  begin
  37.                         case(sel)
  38.                                 3'b000  : dout[0] <= 1'b1;
  39.                                 3'b001  : dout[1] <= 1'b1;       
  40.                                 3'b010  : dout[2] <= 1'b1;
  41.                                 3'b011  : dout[3] <= 1'b1;
  42.                                 3'b100  : dout[4] <= 1'b1;
  43.                                 3'b101  : dout[5] <= 1'b1;
  44.                                 3'b110  : dout[6] <= 1'b1;
  45.                                 3'b111  : dout[7] <= 1'b1;
  46.                                 default : dout    <= 8'd0;        
  47.                                 endcase
  48.                         end               
  49.                
  50. endmodule

  51. /*******仿真代码***********/
  52. `timescale 1ns / 1ps

  53. ////////////////////////////////////////////////////////////////////////////////
  54. // Company:
  55. // Engineer:
  56. //
  57. // Create Date:   19:59:32 10/02/2021
  58. // Design Name:   xuanzeqi
  59. // Module Name:   D:/src/ceshi2/xuanzeqi/sim/vtf_ceshiqi.v
  60. // Project Name:  xuanzeqi
  61. // Target Device:  
  62. // Tool versions:  
  63. // Description:
  64. //
  65. // Verilog Test Fixture created by ISE for module: xuanzeqi
  66. //
  67. // Dependencies:
  68. //
  69. // Revision:
  70. // Revision 0.01 - File Created
  71. // Additional Comments:
  72. //
  73. ////////////////////////////////////////////////////////////////////////////////

  74. module vtf_ceshiqi;

  75.         // Inputs
  76.         reg clk;
  77.         reg rst_n;
  78.         reg [2:0] sel;

  79.         // Outputs
  80.         wire [7:0] dout;
  81.        
  82.         reg[7:0] cnt;

  83.         // Instantiate the Unit Under Test (UUT)
  84.         xuanzeqi uut (
  85.                 .clk(clk),
  86.                 .rst_n(rst_n),
  87.                 .sel(sel),
  88.                 .dout(dout)
  89.         );

  90.         initial begin
  91.                 // Initialize Inputs
  92.                 clk = 0;
  93.                 rst_n = 0;
  94.                 sel = 0;

  95.                 // Wait 100 ns for global reset to finish
  96.                 #500;
  97.                 rst_n = 1;
  98.                 clk = 1;
  99.        
  100.         
  101.                 // Add stimulus here

  102.         end
  103. always #10 clk = ~clk;

  104. always @(posedge clk or negedge rst_n)
  105.         if(rst_n == 0)
  106.                 cnt <= 8'd0;
  107.         else  if( cnt == 8'd250)
  108.                 cnt <=8'd0;
  109.         else
  110.                 cnt <= cnt+ 1'd1;

  111. always @(posedge clk or negedge rst_n)
  112.         if(cnt%30 == 0 )
  113.                 begin
  114.                         case(cnt)
  115.                                 8'd30  : sel = 3'b000 ;
  116.                                 8'd60  : sel = 3'b001 ;       
  117.                                 8'd90  : sel = 3'b010 ;
  118.                                 8'd120 : sel = 3'b011 ;
  119.                                 8'd150 : sel = 3'b100 ;
  120.                                 8'd180 : sel = 3'b101 ;
  121.                                 8'd210 : sel = 3'b110 ;
  122.                                 8'd240 : sel = 3'b111 ;
  123.                                 default : sel = 3'b000;
  124.                         endcase
  125.                 end
  126.         else
  127.          cnt = cnt+1'd1;
  128.        
  129. endmodule


1 举报
  • 仿真图 通过sel的值选择输出

更多回帖

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