微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 关于用verilog语言编写检测开关的问题

关于用verilog语言编写检测开关的问题

时间:10-02 整理:3721RD 点击:
如果现在一共有18个拨动开关,用什么样的办法检测被关闭的两个开关是哪?只要求测出最左和最右两端的开关。我自己的思路部分代码如下:

  1. input[17:0] rang;
  2. wire[17:0] rang_1;

  3. assign rang_1 ={rang[0], rang[1], rang[2],rang[3],rang[4],rang[5],rang[6],rang[7], rang[8],rang[9], rang[10],rang[11],rang[12],rang[13],rang[14],rang[15],rang[16],rang[17]};



  4. always @(posedge clk or negedge clr_n)

  5. if(!clr_n)

  6. left_temp <=5'd0;

  7. else

  8. casex(rang)

  9. 18'b1xxxxxxxxxxxxxxxxx:left_temp <= 5'd1;

  10. 18'b01xxxxxxxxxxxxxxxx:left_temp <= 5'd2;

  11. 18'b001xxxxxxxxxxxxxxx:left_temp <= 5'd3;

  12. 18'b0001xxxxxxxxxxxxxx:left_temp <= 5'd4;

  13. 18'b00001xxxxxxxxxxxxx:left_temp <= 5'd5;

  14. 18'b000001xxxxxxxxxxxx:left_temp <= 5'd6;

  15. 18'b0000001xxxxxxxxxxx:left_temp <= 5'd7;

  16. 18'b00000001xxxxxxxxxx:left_temp <= 5'd8;

  17. 18'b000000001xxxxxxxxx:left_temp <= 5'd9;

  18. 18'b0000000001xxxxxxxx:left_temp <= 5'd10;

  19. 18'b00000000001xxxxxxx:left_temp <= 5'd11;

  20. 18'b000000000001xxxxxx:left_temp <= 5'd12;

  21. 18'b0000000000001xxxxx:left_temp <= 5'd13;

  22. 18'b00000000000001xxxx:left_temp <= 5'd14;

  23. 18'b000000000000001xxx:left_temp <= 5'd15;

  24. 18'b0000000000000001xx:left_temp <= 5'd16;

  25. 18'b00000000000000001x:left_temp <= 5'd17;

  26. 18'b000000000000000001:left_temp <= 5'd18;

  27. default: left_temp <= 5'd0;

  28. endcase



  29. always @(posedge clk or negedge clr_n)

  30. if(!clr_n)

  31. right_temp <=5'd13;

  32. else

  33. casex(rang)

  34. 18'bxxxxxxxxxxxxxxxxx1:right_temp <= 5'd18;

  35. 18'bxxxxxxxxxxxxxxxx10:right_temp <= 5'd17;

  36. 18'bxxxxxxxxxxxxxxx100:right_temp <= 5'd16;

  37. 18'bxxxxxxxxxxxxxx1000:right_temp <= 5'd15;

  38. 18'bxxxxxxxxxxxxx10000:right_temp <= 5'd14;

  39. 18'bxxxxxxxxxxxx100000:right_temp <= 5'd13;

  40. 18'bxxxxxxxxxxx1000000:right_temp <= 5'd12;

  41. 18'bxxxxxxxxxx10000000:right_temp <= 5'd11;

  42. 18'bxxxxxxxxx100000000:right_temp <= 5'd10;

  43. 18'bxxxxxxxx1000000000:right_temp <= 5'd9;

  44. 18'bxxxxxxx10000000000:right_temp <= 5'd8;

  45. 18'bxxxxxx100000000000:right_temp <= 5'd7;

  46. 18'bxxxxx1000000000000:right_temp <= 5'd6;

  47. 18'bxxxx10000000000000:right_temp <= 5'd5;

  48. 18'bxxx100000000000000:right_temp <= 5'd4;

  49. 18'bxx1000000000000000:right_temp <= 5'd3;

  50. 18'bx10000000000000000:right_temp <= 5'd2;

  51. 18'b100000000000000000:right_temp <= 5'd1;

  52. default: right_temp <= 5'd19;

  53. endcase

复制代码

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top